gpt4 book ai didi

php - 拉维尔 5 : Eloquent - order by relation when returning single record

转载 作者:行者123 更新时间:2023-11-29 02:50:47 24 4
gpt4 key购买 nike

我正在尝试使用按关系排序的数据在 Eloquent 中构建查询。想象一下这个数据库结构:

表:站

id
name
...

表:station_status:

id
station_id
status_type_id
date
...

表:status_type:

id
description
...

模型

class Station extends \Eloquent
{
public function stationStatus() {
return $this->hasMany('App\StationStatus', 'station_id', 'id');
}
}

class StationStatus extends \Eloquent
{
public function statusType() {
return $this->hasOne('App\StatusType', 'id', 'status_type_id');
}
}

class StatusType extends \Eloquent
{
...
}

现在是问题。如何按站点 ID 查询站点模型,但按相关状态类型描述排序?

到目前为止我有:

// This just do not work
$query = Station::join('station_status', 'station.id', '=', 'station_status.station_id')
->join('status_type', 'station_status.status_type_id', '=', 'status_type.id')
->orderBy('status_type.description', 'ASC')
->select(['stations.*'])
->with(['stationStatus.statusType']
->find(110);

我认为问题是我没有返回集合,而是使用 find() 方法只返回一个项目,我该如何解决这个问题?

非常感谢您的帮助!

最佳答案

试试这个:

$query = Station::with(['stationStatus' => function($q){
$q->join('status_type', 'station_status.status_type_id', '=', 'status_type.id')
->orderBy('status_type.description', 'ASC');
}])->find(110);

With 是一种获取相关对象的便捷方式,但它不执行连接。它执行新查询并将所有元素附加到您的集合中。您可以将自己的逻辑添加到查询中,就像我对 $q->orderBy(...) 所做的那样。

关于php - 拉维尔 5 : Eloquent - order by relation when returning single record,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36182079/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com