Короткий ответ: вам нужно на самом деле позвонить:
$qb->setParameter('sqbresult', $rand_num)
перед последней строкой.На самом деле, нет причины вызывать его на $qb1
, так как это в основном будет отброшено.
Причина этого в том, что в приведенном выше коде вы просто используете $qb1
в качествеМеханизм генерации DQL.Все параметры, заданные для этого, не передаются при вызове getDQL
, только строковое значение DQL в этой точке.
Если бы вы были var_dump($qb->getDQL())
непосредственно перед концом, вы быувидеть что-то вроде:
SELECT s FROM App\Entity\XX_Table s WHERE s.id IN (
SELECT subss.id FROM App\Entity\XX_Table subss
WHERE RAND() < :sqbresult
ORDER BY RAND() ASC
)
, показывающее, что :sqbresult
все еще остается в DQL и, следовательно, должен иметь набор параметров.