首页 > 解决方案 > 在 Yii2 中选择相关行

问题描述

我在 Station 上链接了相关表(表 train_schedule 有离开站 ID 和到达站 ID): 在此处输入图像描述

我想从 train_schedule 中选择带有车站名称的记录:

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

在 TrainSchedule 类中:

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

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

错误:

关系名称区分大小写。app\models\TrainSchedule 有一个名为“arrivalStation”而不是“ArrivalStation”的关系。

如何从链接表中获取数据?

标签: yii2yii2-basic-appyii2-model

解决方案


您已经正确定义了您的关系,但是您错误地调用了它们。你的关系

  • getArrivalStation应指定为arrivalStation
  • getDepartuteStation()应该departuteStation

在 中指定时,如果您需要在调用时指定多个关系,则joinWith需要提供一个,因为当前您的第二个调用覆盖了前一个。arrayjoinWith->joinWith('getDepartuteStation()')->joinWith('getArrivalStation')

所以查询应该如下所示

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

您应该阅读有关使用关系数据的信息


推荐阅读