我有这种结构。
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 |
+----+----------------+
订单依据不会影响结果。 同样的结果,顺序就像不存在一样。
由于
答案 0 :(得分:1)
在您的代码中,您只需按名称“订购”办公室,这意味着如果每个产品都有许多办公室,它会按字母顺序对办公室进行排序。
要对(OrderBY())一个集合进行排序,该列必须是集合对象的一个属性。一种解决方案可能是加入您的模型。这样的事可能会对你有所帮助。
$res = Product::with('office')
->join('offices', 'products.office_id', '=', 'offices.id')
->select('products.*', 'offices.name')
->orderBy('office.name')
->get();