Задать вопрос
myks92
@myks92
Нашёл решение — пометь вопрос ответом!

Yii как в ActiveQuery вывести связанные данные?

Всем привет)) Довольно простой вопрос для знатоков, но не могу допереть как сделать в ActiveQuery. В модели вывожу прекрасно.

Есть таблица событий:

event
id | to_event | name

id - Айдишник события
to_event - событие, к которому принадлежит событие (может и не принадлежать - NULL)
name - название события

и регистрации на мастер-классы
RegMk
id | event_id

id - Айдишник события
event_id - id событие на которое регистрируется.

Мне нужно в выводить все регистрации своего события + те, которые являются "ребенками" этого события (у кого есть to_event == текущее событие)

В ActiveQuery вывожу регистрации текущего события
public function currentEvent($event_id)
    {
        return $this->andWhere(['[[event_id]]' => $event_id])
    }


Нужно примерно такое:
public function currentEvent($event_id)
    {
        $this->andWhere(['[[event_id]]' => $event_id]);
        
        $to_event = '?';//Нужно получить по связи
        //Если у текущего события есть значение to_event и оно равно текущему событию, то ищем такие записи
        if ($to_event && $to_event == $event_id) {
            $this->orWhere(['[[event_id]]' => $to_event]);
        }   
        return $this;
    }


Использую связанные данные в модели RegMk
/**
     * @return \yii\db\ActiveQuery
     */
    public function getToEvent()
    {
        return $this->hasOne(Event::className(), ['to_event' => 'event_id']);
    }


Суть такая, что при формировании такого запроса
RegMk::find()->currentEvent(1)->all()

Нужно выдавать регистрации события текущего события (1) и регистрации ребенков
  • Вопрос задан
  • 75 просмотров
Подписаться 1 Средний 5 комментариев
Решение пользователя Максим Тимофеев К ответам на вопрос (2)
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
public function toEvent($event_id)
    {
        return $this->joinWith('toEvent')->andWhere(['event.to_event' => $event_id])
    }
Ответ написан
Комментировать