我从Symfony开始,我想制作一个多租户应用程序。
我想在一个表与我的公司表建立链接时,根据连接的用户所属的公司在SQL查询中自动过滤内容。
我找到了创建过滤器的方法,但是找不到在该过滤器中检索有关所连接用户公司的信息的方法。
我使用FOSuser,用自己的User类覆盖它。
我的config.yml
#app\config\config.yml
doctrine:
dbal:
...
orm:
auto_generate_proxy_classes: '%kernel.debug%'
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
filters:
company:
class: 'Acme\CompanyBundle\Repository\Filters\CompanyFilter'
enabled: true
Run Code Online (Sandbox Code Playgroud)
我的过滤器
<?php
#src\Acme\CompanyBundle\Repository\Filters\CompanyFilter.php
namespace Acme\CompanyBundle\Repository\Filters;
use Doctrine\ORM\Mapping\ClassMetaData;
use Doctrine\ORM\Query\Filter\SQLFilter;
use Acme\UserBundle\Entity\UserEntity;
use Acme\CompanyBundle\Entity\CompanyEntity;
class CompanyFilter extends SQLFilter
{
public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias)
{
if ($targetEntity->hasAssociation("company")) {
// here how to get the connected user ???
$company = $user->getCompany();
$idCompany = $company->getId();
return $targetTableAlias . ".company_id = '".$idCompany."'";
}
return "";
}
}
Run Code Online (Sandbox Code Playgroud)
预先感谢您的帮助