Доктрина: выберите строки, которые связаны с другой таблицей - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть две таблицы: назначение и файл, связанный с назначением.Я хотел бы получить строки назначения, которые относятся к любой строке файла, применяя предложение where.

$querybuilder = $this->createQueryBuilder('query');
$querybuilder
    ->select('assignment')
    ->from(AssignmentReadModel::class, 'assignment')
    ->innerJoin('assignment.files', 'files')
    ->where('files.name=:archivo')
    ->setParameter('archivo', 'practica');

$data = $querybuilder->getQuery()->getResult();
$files = $data[0]->files();
var_export($files->count());

С помощью этого запроса я получаю все файлы, когда он должен получить только один файл ".».Когда я выполняю «$ files-> count ()», доктрина выполняет дополнительный запрос, чтобы получить все файлы.

1 Ответ

0 голосов
/ 28 декабря 2018

В запросе столбцы объекта files не выбраны, поэтому он не является частью строк результата и, следовательно, отношение не гидратировано .

Чтобы получить отфильтрованные файлы , выберите также отношение files :

$querybuilder
->select('assignment')
->addSelect('files')

Слово предостережения

Как только отношение было гидратировано, эта гидратированная коллекция используется для этой сущности для других запросов (ссылка вся строка результата не извлекается в объекте , если вы не выберете

1) Обновление Коллекция:

$em->refresh($assignment);

, а также включает опцию refrech для каскадных операций определения отношения:

@OneToMany(targetEntity="File", mappedBy="assignment", cascade={"refresh"})

или

2) при использовании построителя запросов для установки:

use Doctrine\ORM\Query;

$querybuilder->setHint(Query::HINT_REFRESH, true);    // <-- Tell the hydrator to refresh
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...