使用存储库时,对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