1

Doctrine2 に、複合主キーの配列でエンティティのパックを見つける方法はありますか?

$primaryKeys = [ 
    ['key1'=>'val11', 'key2'=>'val21'], 
    ['key1'=>'val12', 'key2'=>'val22'] 
];
4

1 に答える 1

1

カスタム メソッドをリポジトリに追加する必要があります。例えば:

$repository = $em->getRepository('Application\Entity\Class');
$repository->findByPrimaryKeys();

そしてあなたのApplication\Entity\Classリポジトリで:

/**
 * 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 クエリになります。

SELECT e FROM Application\Entity\Class e WHERE 
    (e.key1= ?1 AND e.key2= ?2) 
OR 
    (e.key1= ?3 AND e.key2 = ?4)
于 2015-12-18T14:07:59.657 に答える