OrderBy с переводимым DoctrineExtensionsPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 OrderBy с переводимым DoctrineExtensions

Сообщение Anonymous »

Я уже искал в вопросах Doctrine-extensions/DoctrineExtensions и проблемах DoctrineExtensions.
Я использую DoctrineExtensions для перевода сущности, запись пока работает нормально.
Теперь я хочу получить метод findAll(), упорядоченный по переведенному имени.

Код: Выделить всё

$this->entityManager->getRepository(self::ENTITY_TYPE)->findBy([], ['name'=>'asc'])
Это не влияет на результат, но имеет смысл для меня, поскольку DoctrineExtensions не использует классическое сопоставление аннотаций ORM.

Код: Выделить всё

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();
Но это выдает следующую ошибку: ОШИБКА: оператор не существует: изменение символов = uuid

(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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»