Joh*_* W. 9 php doctrine doctrine-orm
这是dql-query
$dql = "SELECT t Entities\Table t WHERE t.field IN (?1)";
$q = $em->createQuery($dql)
->setParameter(1, '108919,108920');
$result = $q->execute();
Run Code Online (Sandbox Code Playgroud)
如果我通过setParameter传递参数doctrine只返回第一个结果,但是如果我将它们直接放入dql-query中则返回2个结果(这是正确的):
$dql = "SELECT t Entities\Table t WHERE t.field1 IN (108919,108920)";
Run Code Online (Sandbox Code Playgroud)
如何通过setParameter处理WHERE子句中的"IN"?
小智 9
请注意,这仅适用于编号参数,而不适用于命名参数.
$searchParameters = array(108919, 108920);
$dql = "SELECT t Entities\Table t WHERE t.field IN (?1)";
$q = $em->createQuery($dql)
->setParameter(1, $searchParameters);
$result = $q->execute();
Run Code Online (Sandbox Code Playgroud)
以下应该工作正常:
$searchParameters = array(108919, 108920);
$dql = "SELECT t Entities\Table t WHERE t.field IN (?1)";
$q = $em->createQuery($dql)
->setParameter(1, $searchParameters);
$result = $q->execute();
Run Code Online (Sandbox Code Playgroud)
您可以传入一个数组,而不使用implode(),并且doctrine将正确处理它(作为整数列表).
注意:如果您已经使用字符串'108919,108920',则需要使用explode和trim函数.
这里也提到了:如何在Doctrine 2.0中的DQL中使用in语句
小智 0
解决方案1:
$dql = "SELECT t Entities\Table t WHERE t.field IN (?1, ?2)";
$q = $em->createQuery($dql)
->setParameters(array(1 =>'108919', 2 => '108920'));
$result = $q->execute();
Run Code Online (Sandbox Code Playgroud)
解决方案2(更优雅):
$parameters = array(1 =>'108919', 2 => '108920');
$dql = 'SELECT t Entities\Table t WHERE t.field IN (?'.implode(', ?', array_keys($parameters)).')';
$q = $em->createQuery($dql)
->setParameters($parameters);
$result = $q->execute();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13712 次 |
| 最近记录: |