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) и регистрации ребенков
  • Вопрос задан
  • 72 просмотра
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
public function toEvent($event_id)
    {
        return $this->joinWith('toEvent')->andWhere(['event.to_event' => $event_id])
    }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Bandicoot
@Bandicoot
Вась-программист
Не оно?
class Event extends yii\db\ActiveRecord
{
    // ...
    public function getEvents()
    {
        return $this->hasMany(Event::className(), ['to_event' => 'id']);
    }

    public function getRegs()
    {
        return $this->hasMany(RegMk::className(), ['event_id' => 'id']);
    }
    // ...
}
Ответ написан
Ваш ответ на вопрос

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

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