Symfony多个站点一个应用程序

时间:2014-02-07 18:36:27

标签: symfony doctrine

假设我正在创建一个多公司应用程序,因此每个实体的root都以子域/当前登录用户所知的域开头。

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

1 个答案:

答案 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?

表格:你能告诉我你想做什么吗?

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