假设我正在制作一个多公司应用程序,因此每个实体的根都以子域/当前登录的用户所知的域开始。Symfony多个站点一个应用程序
有没有办法强制Doctrine
限制每个查询到特定company_id
?我也对使用表单做解决方案感兴趣。
假设我正在制作一个多公司应用程序,因此每个实体的根都以子域/当前登录的用户所知的域开始。Symfony多个站点一个应用程序
有没有办法强制Doctrine
限制每个查询到特定company_id
?我也对使用表单做解决方案感兴趣。
我可以给你几点想法:
Queries(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)扩展主义的EntityManager由公司申请的过滤器的每个查询。因此,您可以使用自己的自定义服务而不是默认的服务器。
参考文献:
http://symfony.com/doc/current/cookbook/doctrine/multiple_entity_managers.html
How to inject non-default entity managers?
对于形式:你能告诉我,你想做什么?
如果你更具体,我可以帮助你更好;)。
我很肯定你在这里错了......考虑给每个公司*自己的数据库和注册多个实体管理器 - 每个公司一个......然后你只需要在实体管理员在每个请求的基础上。或者你想为每个表中的每个条目创建* company_id *条目?!这将会在一个巨大的混乱中结束。不同的数据库将更容易维护,备份...或者我在这里得到错误吗? – nifr