Я использую DoctrineExtensions для перевода сущности, запись пока работает нормально.
Теперь я хочу получить метод findAll(), упорядоченный по переведенному имени.
Код: Выделить всё
$this->entityManager->getRepository(self::ENTITY_TYPE)->findBy([], ['name'=>'asc'])
Код: Выделить всё
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
#[ORM\Entity()]
#[ORM\Table(name: '`my_table`')]
class MyEntity
{
#[ORM\Id]
#[ORM\Column(type: "uuid")]
private string $id;
#[ORM\Column(nullable: true)]
#[Gedmo\Translatable]
private string $name;
// ..
Код: Выделить всё
$queryBuilder = $this->entityManager->getRepository(self::ENTITY_TYPE)->createQueryBuilder('topic');
$queryBuilder->join(Translation::class, 'translation', 'with', 'translation.foreignKey = topic.id');
// ..
$entities = $queryBuilder->getQuery()->getResult();
(PostgreSQL)
DoctrineExtensions создала таблицу перевода с полем ForeignKey с изменяющимся типом символов. Идентификатор объекта, который я использую, имеет тип uuid.
После небольшого исследования мне нужно будет привести либо Translation.foreignKey, либо theme.id.
Когда я пытаюсь перевести.foreignKey:uuid, я получаю сообщение об ошибке: Класс Gedmo\Translatable\Entity\Translation не имеет поля или ассоциации с именем ForeignKey:uuid
Когда я пытаюсь CAST(translation.foreignKey as VARCHAR) или CAST(topic.id AS UUID), я получаю сообщение об ошибке: Ошибка: ожидаемая известная функция получена 'CAST'
Моей следующей идеей было бы (быстро и грязно) написать SQL вручную, получить список uuid и выполнить findBy() с помощью in( uuid), но, если возможно, я хочу этого избежать.
Есть идеи?
Подробнее здесь: https://stackoverflow.com/questions/790 ... anslatable
Мобильная версия