alex4answ
@alex4answ

Как сделать hasMany с условием в переменной?

Добрый день.

Есть комментарии к статьям, мне нужно достать комментарии за последние 7, 28 дней.

сейчас я сделал так:

Article model:
public function getComments7(){
        return $this->hasMany(Comments::className(), ['page_id' => 'id'])->andWhere('date > DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY)');
    }
    
    public function getComments28(){
        return $this->hasMany(Comments::className(), ['page_id' => 'id'])->andWhere('date > DATE_SUB(CURRENT_DATE, INTERVAL 28 DAY)');
    }

и уже в with() при выборке подставляю нужное мне, но проблема вся к том, что обращаться к коментариям нужно по разному
->comments7 и ->comments28, что не очень удобно

Пытался сделать с JoinWith и уже в условии писать за какой период мне нужны комментарии, но результат вообще пуст.

Какие варианты есть кроме LeftJoin, чтобы достать страницы и последние комментарии к ним ?

Не хочу костылить и делать криво косо, потому спрашиваю как лучше поступить)
  • Вопрос задан
  • 139 просмотров
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
2 связи не нужны, одной достаточно
public function getComments($period=false){
        $query = $this->hasMany(Comments::className(), ['page_id' => 'id']);
        if($period){
             $query->andWhere('date > DATE_SUB(CURRENT_DATE, INTERVAL '.$period.' DAY)');
        }
        return $query;
    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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