Symfony2 - Doctrine2 Respository - 为所有方法设置条件

时间:2015-06-09 16:22:07

标签: symfony doctrine-orm

使用存储库时,对Foo Entity的所有查询都需要设置相同的条件。我打算做的是在存储库上设置一个account_id属性,并将其与任何find方法一起使用,这怎么可能是正确的方法呢?

class FooRepository extends EntityRepository {

public function setAccountId($account_id) {
    $this->account_id = $account_id;
}

public function findOneBy(array $criteria, mixed $orderBy = null)
{
    $criteria += array('account'=>$this->account_id);
    return parent::findOneBy($criteria, $orderBy);
}

}

或者更新每个查找方法并在调用时设置标准更好:

getRepository('Foo')->findOneBy(array('id'=>1,'account_id'=>2));

存储库还包含用于搜索Foo的自定义方法,这些方法还必须包含account_id。

function search($query=null, $current_page = 1, $page_size = 20) {
...
        $qb->andWhere('f.account = :account_id')
            ->setParameter('account_id',$this->account_id);

使用Doctrine过滤器

  

http://doctrine-orm.readthedocs.org/en/latest/reference/filters.html

这似乎允许我在从Foo实体中进行选择时操纵查询。但是,如果我从与Foo有关系的Bar中进行选择,是否可以在使用过滤器不存在时添加连接?

例如:

SELECT FROM Bar

应该成为:

SELECT FROM BAR JOIN Foo WHERE Foo.account_id=x

0 个答案:

没有答案