PHP Symfony DQL - 参数太少:查询定义了 1 个参数,但您只绑定了 0 个
PHP Symfony DQL - Too few parameters: the query defines 1 parameters but you only bound 0
我正在尝试在 symfony 存储库项目中组合一个 SELECT 但由于某种原因在主题中收到错误消息。已经研究了几天,但找不到具有不同代码变体的解决方案。这是代码
$qb3 = $this->getEntityManager()->createQueryBuilder();
$qb3-> select('check.userid')
-> from('App\Entity\YY_Table', 'check')
-> where('DATE_FORMAT(now(), \'%e-%b-%Y\') - DATE_FORMAT(check.datecreated, \'%e-%b-%Y\') <=360');
$qb2 = $this->getEntityManager()->createQueryBuilder();
$qb2-> select('((:numemails1 / COUNT(subs.id)) * 10)')
-> from('App\Entity\XX_Table', 'subs')
-> where($qb2->expr()->notIn('subs.id', $qb3->getDQL()))
-> setParameter('numemails1', $numemails);
$rand_num = $qb2->getQuery()->getResult();
$qb1 = $this->getEntityManager()->createQueryBuilder();
$qb1-> select('subss.id')
-> from('App\Entity\XX_Table', 'subss')
-> where('RAND() < :sqbresult')
-> orderBy('RAND()')
-> setMaxResults($numemails)
-> setParameter('sqbresult', $rand_num);
/*primary query to select users for future campaigns*/
$qb = $this->getEntityManager()->createQueryBuilder();
$qb -> select('s')
-> from('App\Entity\XX_Table', 's')
-> where($qb->expr()->In('s.id', $qb1->getDQL()));
//-> where($expr->not($expr->exists($qb1->getDQL())));
return $qb ->getQuery() ->getResult();
我正在尝试从下面的 .sql 代码中获取 select 符合一些基本标准的数据库中的随机实体
SELECT
g.* FROM XX_table g
JOIN
(SELECT
id
FROM
XX_table
WHERE
RAND() < (SELECT
((60000 / COUNT(*)) * 10) as rand_num
FROM
XX_table
WHERE
id NOT IN (SELECT userID as id FROM YY_table emst WHERE CURDATE() - emst.datecreated <=360)
)
ORDER BY RAND()
LIMIT 60000) AS z ON z.id= g.id
我已经检查了这里的答案:
和这里
https://github.com/stwe/DatatablesBundle/issues/685
感觉解决方案就在附近但无法实现
简短的回答是您需要实际调用:
$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 中,因此需要设置参数。
我正在尝试在 symfony 存储库项目中组合一个 SELECT 但由于某种原因在主题中收到错误消息。已经研究了几天,但找不到具有不同代码变体的解决方案。这是代码
$qb3 = $this->getEntityManager()->createQueryBuilder();
$qb3-> select('check.userid')
-> from('App\Entity\YY_Table', 'check')
-> where('DATE_FORMAT(now(), \'%e-%b-%Y\') - DATE_FORMAT(check.datecreated, \'%e-%b-%Y\') <=360');
$qb2 = $this->getEntityManager()->createQueryBuilder();
$qb2-> select('((:numemails1 / COUNT(subs.id)) * 10)')
-> from('App\Entity\XX_Table', 'subs')
-> where($qb2->expr()->notIn('subs.id', $qb3->getDQL()))
-> setParameter('numemails1', $numemails);
$rand_num = $qb2->getQuery()->getResult();
$qb1 = $this->getEntityManager()->createQueryBuilder();
$qb1-> select('subss.id')
-> from('App\Entity\XX_Table', 'subss')
-> where('RAND() < :sqbresult')
-> orderBy('RAND()')
-> setMaxResults($numemails)
-> setParameter('sqbresult', $rand_num);
/*primary query to select users for future campaigns*/
$qb = $this->getEntityManager()->createQueryBuilder();
$qb -> select('s')
-> from('App\Entity\XX_Table', 's')
-> where($qb->expr()->In('s.id', $qb1->getDQL()));
//-> where($expr->not($expr->exists($qb1->getDQL())));
return $qb ->getQuery() ->getResult();
我正在尝试从下面的 .sql 代码中获取 select 符合一些基本标准的数据库中的随机实体
SELECT
g.* FROM XX_table g
JOIN
(SELECT
id
FROM
XX_table
WHERE
RAND() < (SELECT
((60000 / COUNT(*)) * 10) as rand_num
FROM
XX_table
WHERE
id NOT IN (SELECT userID as id FROM YY_table emst WHERE CURDATE() - emst.datecreated <=360)
)
ORDER BY RAND()
LIMIT 60000) AS z ON z.id= g.id
我已经检查了这里的答案:
简短的回答是您需要实际调用:
$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 中,因此需要设置参数。