首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >原理通过组合主键的数组查找多个

原理通过组合主键的数组查找多个
EN

Stack Overflow用户
提问于 2015-12-18 21:05:00
回答 1查看 1.3K关注 0票数 1

在Doctrine2中,有没有办法通过组合主键的数组来查找实体包?

代码语言:javascript
运行
复制
$primaryKeys = [ 
    ['key1'=>'val11', 'key2'=>'val21'], 
    ['key1'=>'val12', 'key2'=>'val22'] 
];
EN

回答 1

Stack Overflow用户

发布于 2015-12-18 22:08:00

您必须将您的自定义方法添加到存储库。例如:

代码语言:javascript
运行
复制
$repository = $em->getRepository('Application\Entity\Class');
$repository->findByPrimaryKeys();

在您的Application\Entity\Class存储库中:

代码语言:javascript
运行
复制
/**
 * Find entity by primary keys.
 *
 * @param Parameters[] $array
 * @return Paginator
 */
public function findByPrimaryKeys(array $array)
{
    $qb = $this->createQueryBuilder('e');

    foreach($array as $index => $keys){
        $key1 = $index * 2 + 1;
        $key2 = $index * 2 + 2;
        $qb->orWhere(
            $qb->expr()->andX(
                $qb->expr()->eq('e.key1', '?'.$key1), 
                $qb->expr()->eq('e.key2', '?'.$key2)
            )
        );
        $qb->setParameter($key1, $keys['key1']);
        $qb->setParameter($key2, $keys['key2']);
    };
    return $qb->getQuery()->getResult();
}

也许还有其他方法,但这是可行的,并导致以下DQL查询:

代码语言:javascript
运行
复制
SELECT e FROM Application\Entity\Class e WHERE 
    (e.key1= ?1 AND e.key2= ?2) 
OR 
    (e.key1= ?3 AND e.key2 = ?4)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34356389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档