假设我正在创建一个多公司应用程序,因此每个实体的root都以子域/当前登录用户所知的域开头。
有没有办法强制Doctrine
将每个查询限制为特定company_id
?我也对使用表单的解决方案感兴趣。
答案 0 :(得分:4)
我可以给你一些想法:
查询选项(Doctrine)。我想你的所有数据库表中都有一个“company_id”列=>所有实体中的公司属性。
1)创建查询全局过滤器。看看:http://docs.doctrine-project.org/en/latest/reference/filters.html
2)创建一个抽象的基础知识库,你可以这样做:
abstract class BaseRepository {
//...
protected function getQBDefault($company) {
$alias = $this->getClassAlias();
$query = $this->createQueryBuilder($alias)
->where($alias . '.company = :company')
->setParameter('company', $company);
return $query;
}
abstract function getClassAlias();
}
class MyRepository extends BaseRepository {
//....
public function findMyResults($company) {
$qb = $this->getQBDefault($company);
//DO STH WITH THIS QUERY BUILDER
return $qb->getQuery()->getResult();
}
}
3)扩展Doctrine EntityManager以按公司将过滤器应用于每个查询。因此,您可以在任何地方使用自己的自定义服务而不是默认服务。
参考文献:
http://symfony.com/doc/current/cookbook/doctrine/multiple_entity_managers.html
How to inject non-default entity managers?
表格:你能告诉我你想做什么吗?
如果你更具体,我可以帮助你更好;)。