Laravel 按相关 table 排序无效
Laravel order by related table not working
我有这个结构。
class Product extends Model{
public function office()
{
return $this->belongsTo(Office::class,'office_id');
}
}
我想列出 products
按 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;
}
这是 Product
数据:
+----+--------+
| id | name |
+----+--------+
| 1 | Life |
| 2 | Cars |
| 3 | Health |
| 4 | House |
+----+--------+
这是Office
中的数据
+----+----------------+
| id | name |
+----+----------------+
| 1 | First office |
| 2 | working office |
+----+----------------+
顺序不影响结果。
同样的结果,按赞排序不存在。
谢谢
在您的代码中,您只是 "ordering" 按名称排列的办公室,这意味着如果每个产品有多个办公室,它将按字母顺序对办公室进行排序。
要对集合进行排序 (OrderBY()),列必须是集合对象的属性。一种解决方案可能是加入您的模型。这样的事情可能对你有帮助。
$res = Product::with('office')
->join('offices', 'products.office_id', '=', 'offices.id')
->select('products.*', 'offices.name')
->orderBy('office.name')
->get();
我有这个结构。
class Product extends Model{
public function office()
{
return $this->belongsTo(Office::class,'office_id');
}
}
我想列出 products
按 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;
}
这是 Product
数据:
+----+--------+
| id | name |
+----+--------+
| 1 | Life |
| 2 | Cars |
| 3 | Health |
| 4 | House |
+----+--------+
这是Office
中的数据
+----+----------------+
| id | name |
+----+----------------+
| 1 | First office |
| 2 | working office |
+----+----------------+
顺序不影响结果。 同样的结果,按赞排序不存在。
谢谢
在您的代码中,您只是 "ordering" 按名称排列的办公室,这意味着如果每个产品有多个办公室,它将按字母顺序对办公室进行排序。
要对集合进行排序 (OrderBY()),列必须是集合对象的属性。一种解决方案可能是加入您的模型。这样的事情可能对你有帮助。
$res = Product::with('office')
->join('offices', 'products.office_id', '=', 'offices.id')
->select('products.*', 'offices.name')
->orderBy('office.name')
->get();