我有这些实体
User
(ManyToMany)
Customer (OneToOne --> a customer can have a related customer)
我的应用有效。现在我想管理权限。当用户登录时,我想只显示与他相关的客户以及与儿童客户相关的客户。
例如,
我想我必须覆盖Doctrine Repository或使用EntityManagerDecorator我只是想问一下最佳实践是什么?谢谢 !
基本上,应该将搜索特定数据的操作委托给存储库。最终,如果您必须搜索不同的数据源,则可以为此特定响应创建服务,并注入所需的依赖项。在你的情况下,我会说你不需要任何东西只需创建一个UserRepository并在那里写一个功能,你可以做你需要的。
为什么不在customerRepository
中创建自己的自定义findAll()函数?过滤您的用户?
就像是
public function findAllRelatedToUser(User $user)
{
return $this->createQueryBuilder('c')
->innerJoin('c.user', 'u')
->andWhere('u.id = :user_id')
->setParameter('user_id', $user->getId())
->getQuery()
->getResult();
}
最后我找到了一个更好的方法。
主义过滤器
内核上的侦听请求,如果涉及我的实体,则应用我的过滤器(添加WHERE id = xx)
我用这个:http://blog.michaelperrin.fr/2014/12/05/doctrine-filters/