@mirvo

Как добавить andFilterWhere в каждый запрос?

Всем привет.

Необходимо добавить условие andFilterWhere() в каждый запрос, поступающий в модель через find() и findOne()

Можете подсказать, как это сделать?

Изначально был косяк со структурой проекта и теперь приходиться вот таким вот способом выкручиваться..
  • Вопрос задан
  • 39 просмотров
Решения вопроса 1
maksim92
@maksim92 Куратор тега Yii
Нашел решение — пометь вопрос ответом!
Не совсем понятно что вы имеете ввиду, но вот пример:
Achievement::find()
    ->joinWith([
        'assignments' => function (ActiveQuery $q) {
            return $q->andWhere('activity_achievement_assignments.id')
                ->orderBy('activity_achievement_assignments.id DESC');
        }
    ])
    ->forOwner($ownerId)
    ->limit($limit)
    ->andFilterWhere(['activity_achievement_assignments.status' => 'active'])
    ->orderBy('id DESC')
    ->all()

В самой модели:
/**
     * @return ActiveQuery
     */
    public function getCareers(): ActiveQuery
    {
        return $this->hasMany(Career::class, ['member_id' => 'id'])->orderBy('activity_member_careers.year_from')
    ->andFilterWhere(['activity_achievement_assignments.status' => 'active']);
    }


Для findOne() не получится так сделать дополнительные условия, так как это сокращённая функция, к которой нельзя добавить стрелочный оператор. Добавление условий возможность только с функцией find()

User::find->where(['id' => 1])->one();
//Сокращенная запись
User::findOne(1);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы