Я использую 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 для Laravel, я не мог следовать руководству, которое нашел здесь (symfonycasts). Я не нашел ничего об этом в документации для Laravel.
Итак, я отредактировал свой config / doctrine.php:
'filters' => [
'active_rows' => 'app\Doctrine\Filters\ActiveFilter'
],
Когда я пробую этот код, я получил следующее:
Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR) Класс app / Doctrine / Filters / ActiveFilter не найден
При необходимости я предоставил полное пространство имен, ошибки не обнаружил. Я считаю, что путь правильный. Я что-то упускаю ?
У тебя есть идея?
Заранее спасибо,
Я пробовал использовать приложение с :: class и без него. Но я получаю ту же ошибку. Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR) Class '\ App \ Doctrine \ Filters \ ActiveFilter :: class' не найден
если ваше пространство имен правильное, попробуйте запустить composer dump-autoload
Теперь он работает благодаря команде. Дело в том, что я запускал его раньше. Но теперь он полностью работает! Спасибо.
Можете ли вы изменить
app
наApp
в вашемconfig/doctrine.php
или использовать\App\Doctrine\Filters\ActiveFilter::class