denisbondar
@denisbondar
Python, PHP developer

Yii2: ActiveRecord как получить НЕ связанные данные?

Подскажите пожалуйста, как по аналогии с получением ActiveQuery для связанных полей, получить ActiveQuery для не связанных. Например, нужно получить все не прочитанные новости.

Пример
Имеется две модели типа AR: Customer и News, а также связующая их таблица news_read с полями customer_id и news_id.

При прочтении клиентом определенной новости, выполняется связывание моделей через link(), что добавляет запись в таблицу news_read.

Класс Customer содержит метод getReadNews(), который возвращает ActiveQuery, который может выполнить выборку всех прочитанных новостей. Как реализовать тоже самое, но для не прочитанных?

class Customer extends ActiveRecord
{

    public function getReadNews()
    {
        return $this->hasMany(News::className(), ['id' => 'news_id'])
            ->viaTable('{{%news_read}}', ['customer_id' => 'id']);
    }

    public function getUnreadedNews()
    {
        // ???
    }
}
  • Вопрос задан
  • 223 просмотра
Решения вопроса 1
@masterfreelance
программист со стажем
То есть как я понял вам нужно выбрать все новости у которых id нет в таблице news_read для данного customer_id?
Если это так, то реализацию можно сделать следующую:

public function getUnreadedNews()
    {
        return News::find()->where(['not in', 'id', $this->getReadNews()->select('id')]);
    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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