【问题标题】:Select related rows in Yii2在 Yii2 中选择相关行
【发布时间】:2019-03-11 03:52:50
【问题描述】:

我在 Station 上链接了相关表(表 train_schedule 有离开站 ID 和到达站 ID): enter image description here

我想从 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”。

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

【问题讨论】:

  • 如果它对您有用,您能否将答案标记为正确,它可能会帮助其他寻找相同解决方案的人

标签: yii2 yii2-basic-app yii2-model


【解决方案1】:

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

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

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

所以查询应该如下所示

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

你应该阅读Working with Relational Data

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多