我在Laravel(Laravel 5.7)上使用Doctrine,我想实现一个全局过滤器,而不是手动向每个查询“其中active = true”添加。
我听说过SQL过滤器,并提出了此类:
namespace App\Doctrine\Filters;
use Doctrine\ORM\Mapping\ClassMetadata;
use Doctrine\ORM\Query\Filter\SQLFilter;
class ActiveFilter extends SQLFilter
{
public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias)
{
return sprintf('%s.active = %s', $targetTableAlias, $this->getParameter('active'));
}
}
然后,在我的主控制器中(我的所有控制器都从该控制器扩展):
public function __construct($em)
{
$this->em = $em;
// Only display active rows.
$this->em->getFilters()
->enable('active_rows')
->setParameter('active', true);
}
我认为这是正确的,但是我不确定。当我有了Laravel的教义时,我无法遵循发现的here (symfonycasts)教程。在Laravel的文档中找不到任何内容。
所以我编辑了config / doctrine.php:
'filters' => [
'active_rows' => 'app\Doctrine\Filters\ActiveFilter'
],
当我尝试此代码时,我得到了:
Symfony \组件\调试\异常\ FatalThrowableError(E_ERROR) 找不到类“ app / Doctrine / Filters / ActiveFilter”
根据需要,我提供了完整的名称空间,但没有找到错误。我认为这条路是正确的。我想念什么吗?
你有个主意吗?
先谢谢您