2014-02-07 25 views
1

假设我正在制作一个多公司应用程序,因此每个实体的根都以子域/当前登录的用户所知的域开始。Symfony多个站点一个应用程序

有没有办法强制Doctrine限制每个查询到特定company_id?我也对使用表单做解决方案感兴趣。

+1

我很肯定你在这里错了......考虑给每个公司*自己的数据库和注册多个实体管理器 - 每个公司一个......然后你只需要在实体管理员在每个请求的基础上。或者你想为每个表中的每个条目创建* company_id *条目?!这将会在一个巨大的混乱中结束。不同的数据库将更容易维护,备份...或者我在这里得到错误吗? – nifr

回答

3

我可以给你几点想法:

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?

对于形式:你能告诉我,你想做什么?

如果你更具体,我可以帮助你更好;)。

相关问题