php – QueryBuilder:循环中的参数
发布时间:2020-12-13 17:46:32 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试使用SF2 / Doctrine Querybuilder为搜索字段构建请求. 在我的搜索字段中,我希望能够键入多个关键字,并获得与所有关键字匹配的结果. 所以,这是我的代码(在存储库中): foreach ($keywordsArray as $keyword) { $qb-andWhere($qb-expr()-orX( $qb-ex
我正在尝试使用SF2 / Doctrine Querybuilder为搜索字段构建请求.
在我的搜索字段中,我希望能够键入多个关键字,并获得与所有关键字匹配的结果. 所以,这是我的代码(在存储库中): foreach ($keywordsArray as $keyword) { $qb->andWhere($qb->expr()->orX( $qb->expr()->like('p.name',':keyword'),$qb->expr()->like('p.surname',':keyword') )); $qb->setParameter('keyword','%'.$keyword.'%'); var_dump($keyword); } 问题:参数’keyword’始终是$keywordsArray的最后一个元素… 例如,当我在搜索字段中输入“John Smith”时,我有: $keywordsArray array (size=2) 0 => string 'John' (length=4) 1 => string 'Smith' (length=5) 循环中的var_dump($keyword)告诉我$keyword = John然后$keyword = Smith. 但是,Symfony profiler告诉我执行的查询是: SELECT [...] FROM [...] WHERE (l0_.name LIKE '%Smith%' OR a1_.surname LIKE '%Smith%') AND (l0_.name LIKE '%Smith%' OR a1_.surname LIKE '%Smith%') 我期待的是: SELECT [...] FROM [...] WHERE (l0_.name LIKE '%John%' OR a1_.surname LIKE '%John%') AND (l0_.name LIKE '%Smith%' OR a1_.surname LIKE '%Smith%') 你有任何解释/解决方案吗?我应该修改什么才能解决问题? 解决方法
您应该使用唯一的参数名称,例如:
foreach ($keywordsArray as $id => $keyword) { $qb->andWhere($qb->expr()->orX( $qb->expr()->like('p.name',":keyword_".$id),":keyword_".$id) )); $qb->setParameter("keyword_".$id,'%'.$keyword.'%'); } 因为您每次都用新值替换关键字 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |