通过相关表的Laravel订单不起作用
我有这个结构通过相关表的Laravel订单不起作用,laravel,eloquent,sql-order-by,Laravel,Eloquent,Sql Order By,我有这个结构 class Product extends Model{ public function office() { return $this->belongsTo(Office::class,'office_id'); } } 我想按office.name列出产品订单。 这就是问题所在 $res = \App\Product::with(['office' => function($q){ $q->order
class Product extends Model{
public function office()
{
return $this->belongsTo(Office::class,'office_id');
}
}
我想按office.name列出产品订单。
这就是问题所在
$res = \App\Product::with(['office' => function($q){
$q->orderBy('offices.name','asc');
}])->get();
这是输出循环
foreach($res as $key => $val){
print "<br />user: ".$val->id.", office: ".$val->office->id;
}
以下是产品数据:
+--+----+
|id |名称|
+--+----+
|1 |生活|
|2辆车|
|3 |健康|
|4号楼|
+--+----+
这是办公室里的数据
+--+--------+
|id |名称|
+--+--------+
|1 |第一办公室|
|2 |工作办公室|
+--+--------+
订单不影响结果。
同样的结果,不存在按like排序的命令
谢谢在您的代码中,您只需按名称订购办公室,这意味着如果每个产品有多个办公室,它将按字母顺序对办公室进行排序 要按集合排序,列必须是集合对象的属性。一个解决方案是加入您的模型。像这样的东西可能对你有帮助
$res = Product::with('office')
->join('offices', 'products.office_id', '=', 'offices.id')
->select('products.*', 'offices.name')
->orderBy('office.name')
->get();
事实并非如此,每个产品都有一个办公室。正如模型所说的,不管是什么情况,我的代码仍然可以完成这项工作。试试看。你可以看到我用“office”怎么用“office”是单数对吗?因为我知道它只有一个办公室。