Существует ли в Yii2 Behaviour изменяющий SELECT запрос в бд?

Да, в Yii2 существует Behaviour, позволяющий изменять SELECT запросы к базе данных. Этот Behaviour называется ActiveQueryFilter.

ActiveQueryFilter позволяет добавить дополнительные условия к запросу, такие как фильтры или сортировка. Он представляет собой класс, который наследуется от Behavior и связывается с экземпляром класса ActiveQuery.

Чтобы использовать ActiveQueryFilter, вам необходимо выполнить следующие шаги:

1. Создайте новый класс, наследуемый от класса Behavior:

use yiibaseBehavior;
use yiidbActiveRecord;
use yiidbActiveQuery;

class CustomQueryFilter extends Behavior
{
    public function events()
    {
        return [
            ActiveRecord::EVENT_BEFORE_FIND => 'modifyQuery',
        ];
    }

    public function modifyQuery($event)
    {
        /** @var ActiveQuery $query */
        $query = $event->sender;
        
        // Измените SELECT запрос здесь, добавив новые условия или сортировку
        $query->andWhere(['status' => 'active']);
    }
}

2. Примените Behaviour к экземпляру класса ActiveQuery:

use appmodelsCustomModel;

$query = CustomModel::find();
$query->attachBehavior('customFilter', CustomQueryFilter::class);

3. Выполните запрос:

$result = $query->all();

В приведенном выше примере мы создали CustomQueryFilter, который добавляет дополнительное условие status = 'active' к запросу. Вы можете изменить условие на любое другое, в зависимости от ваших потребностей. Обратите внимание, что ActiveRecord::EVENT_BEFORE_FIND используется в качестве события, при котором Behaviour будет применяться к запросу. Вы также можете использовать другие события, такие как EVENT_INIT, EVENT_BEFORE_UPDATE, и т. д., в зависимости от того, когда вы хотите, чтобы Behaviour сработал.

Это только один из примеров использования Behaviour в Yii2 для изменения SELECT запросов. С использованием Behaviour вы можете легко настраивать и расширять запросы к базе данных, в зависимости от ваших потребностей.