通过相关表的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”是单数对吗?因为我知道它只有一个办公室。