Выберите связанные строки в Yii2

#yii2 #yii2-basic-app #yii2-model

#yii2 #yii2-basic-app #yii2-модель

Вопрос:

У меня есть связанные таблицы (таблица train_schedule имеет departute_station_id и arrival_station_id), связанные со станцией: введите описание изображения здесь

Я хочу выбрать записи из train_schedule с названием станций:

  $trainsTchedule = TrainSchedule::find()
            ->joinWith('getArrivalStation')
            ->joinWith('getDepartuteStation()')
            ->all();
  

В классе TrainSchedule:

  /**
     * @return yiidbActiveQuery
     */
    public function getArrivalStation()
    {
        return $this->hasOne(Station::className(), ['id' => 'arrival_station_id']);
    }
  

И

   /**
     * @return yiidbActiveQuery
     */
    public function getDepartuteStation()
    {
        return $this->hasOne(Station::className(), ['id' => 'departute_station_id']);
    }
  

Ошибка:

Имена связей чувствительны к регистру. app models TrainSchedule имеет отношение с именем «arrivalStation» вместо «ArrivalStation».

Как получить данные из связанных таблиц?

Комментарии:

1. можете ли вы отметить ответ как правильный, если он сработал для вас, это может помочь другим, ищущим такое же решение

Ответ №1:

Вы правильно определили свои отношения, но вы вызываете их неправильно. Ваше отношение

  • getArrivalStation должно быть указано как arrivalStation
  • getDepartuteStation() должно быть departuteStation

при указании в joinWith , и вам нужно указать, array если вам нужно указать несколько связей при вызове, joinWith поскольку в данный момент ваш второй вызов ->joinWith('getDepartuteStation()') переопределяет предыдущий ->joinWith('getArrivalStation') .

Таким образом, запрос должен выглядеть следующим образом

 $trainsTchedule = TrainSchedule::find()
    ->joinWith(['arrivalStation','departuteStation'])
    ->all();
  

Вам следует прочитать о работе с реляционными данными