Запрос доктрины SQL, который имеет столько же результатов, сколько и значения, переданные в параметрах - PullRequest
3 голосов
/ 28 июня 2019

Предположим, что я передал функции массив:

$arrValues = ['19', '4', '4', '18', '19']

Для функции:

$objRequeteDoctrine = $this->getEntityManager()->createQueryBuilder()
    ->select('o')
    ->from('xxxxxx', 'o')
    ->where('o.id IN (:values)')
    ->andwhere('o.actif = 1')
    ->setParameter(':values', $arrValues );

return $objRequeteDoctrine->getQuery()->getResult();

Здесь он будет получать 3 объекта (дубликаты удалены).Но что, если я хочу получить 5 объектов с дубликатами?Это возможно?

Спасибо.

1 Ответ

0 голосов
/ 29 июня 2019

Это может быть не ответ на ваш вопрос, чтобы достичь этого с помощью Doctrine, но может быть решением вашей проблемы. Как насчет генерации полного массива впоследствии?

$arrValues = ['19', '4', '4', '18', '19'];

$objRequeteDoctrine = $this->getEntityManager()->createQueryBuilder()
    ->select('o')
    ->from('xxxxxx', 'o')
    ->where('o.id IN (:values)')
    ->andwhere('o.actif = 1')
    ->setParameter(':values', $arrValues );

$result = $objRequeteDoctrine->getQuery()->getResult();

// Get the object ids in a separate array to find their position in the result

$idsOnly = [];
foreach($result as $entity) {
    $idsOnly[] = $entity->getId();
}

// Find the key of the object by id in the first result

$fullResult = [];
foreach ($arrValues as $id) {
    $keyFound = array_search($id, $idsOnly);
    if ($keyFound !== false) {
        $fullResult[] = $result[$keyFound];
    }
}

return $fullResult;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...