nepster-web
@nepster-web

Yii2 — как сделать выборку записей?

Есть метод, который должен считать кол-во комментариев:

public function getCountComments() {

        $condition = [];
        
        if($this->post_id) {
            $condition['post_id'] = $this->post_id;
        }
        
        if($this->type) {
            $condition['type'] = $this->type;
        }
        
        return self::find()
                    ->where($condition)
                    ->count();
    }


Все работает все отлично. Теперь мне нужно чуть расширить данный метод следующим образом. Я хочу добавить флаг периода и на основе его выводить кол-во комментариев за день например.

Тоесть как-то так:
public function getCountComments($period = false) {

        $condition = [];
        
        if($this->post_id) {
            $condition['post_id'] = $this->post_id;
        }
        
        if($this->type) {
            $condition['type'] = $this->type;
        }
        
        // Выборка за определенный период 
        if($period == 'day') {
            return self::find()->where('date_create>=CURDATE()')->count();
        }
        
        return self::find()
                    ->where($condition)
                    ->count();
    }


Но проблема в том, что я не могу правильно написать where.

То есть если $period == 'day' то нужно сделать выборку учитывая post_id, type и CURDATE().
Пробовал лепить туда addWhere или addCondition но не получилось. Подскажите, пожалуйста, как правильно составить такой запрос.
  • Вопрос задан
  • 15220 просмотров
Решения вопроса 1
public function getCountComments($period = false) {

        $query = self::find();

        if($this->post_id) {
            $query->where(['post_id' => $this->post_id]);
        }

        if($this->type) {
            $query->andWhere(['type' => $this->type]);
        }

        if($period == 'day') {
            $query->andWhere('date_create>=CURDATE()');
        }

        return $query->count();
    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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