dauren101
@dauren101
Python, Django ,Vue.js

Сформировать запрос AR с условиями YII2?

$query = (new \yii\db\Query());
            $query->select('*');
            $query->from('docs');
            
            if($status_id==1 || $status_id==null)
            {
    $query->where(['>=','status_id',-1]);
   }
   else{
    $query->where(['=','status_id',$status_id]);
   }
            
   
   if($from1!=null)
   {
    $query->andWhere(['>=','bterm',$from1]);
   }
   if($to1!=null)
   {
    $query->andWhere(['<=','eterm',$to1]);
   }
   $data=$query->all();

Как сделать тоже самое только с AR?
Имею ввиду, что составлять запрос нужно в зависимости от условий.
В зависимости если eсть период его нужно добавить в where если нет , то не добавлять. И в зависимости от переданных данных составлять запрос.
  • Вопрос задан
  • 156 просмотров
Решения вопроса 1
@sidni
Php Developer
так в юии2 активрекорд отнаследован от билдера
$docs = Docs::find();
if($status_id==1 || $status_id==null) {
    $docs->where(['>=','status_id',-1]);
 }else {
    $docs->where(['status_id'=>$status_id]);
}
$data=$docs->andFilterWhere(['>=','bterm',$from1])
                    ->andFilterWhere(['<=','eterm',$to1])
                    ->all();
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
usdglander
@usdglander
Yipee-ki-yay
$query = Docs::find();
А дальше как у вас. :) Надеюсь у вас уже есть модель Dosc, которая наследуется от ActiveRecord. Нет? Тогда можете сгенерировать её через Gii.

upd: Если вопрос в том как "Красиво записать условия"? То в Вашем случае - ваш вариант проще и читабельнее.
upd2: Ах, да. Там andFilterWhere можно использовать как и указал sidni
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы