Я использую Doctrine для Laravel (Laravel 5.7), и я хочу реализовать глобальный фильтр вместо добавления вручную к каждому запросу 'where 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);
}
Я предполагаю, что это правильно, но тогда я неконечно на всехПоскольку у меня есть Doctrine for Laravel, я не мог следовать учебнику, который нашел здесь (symfonycasts) .В документации об этом для Laravel я ничего не нашел.
Поэтому я отредактировал свой config / doctrine.php:
'filters' => [
'active_rows' => 'app\Doctrine\Filters\ActiveFilter'
],
Когда я попробовал этот код, я получил следующее:
Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR) Класс 'app / Doctrine / Filters / ActiveFilter' не найден
По мере необходимости я предоставил полное пространство имен, я не знаюне могу найти ошибку.Я думаю, что путь правильный.Я что-то упустил?
У вас есть идея?
Заранее благодарю,