Laravel 按相关 table 排序无效

Laravel order by related table not working

我有这个结构。

class Product extends Model{
    public function office()
    {
        return $this->belongsTo(Office::class,'office_id');
    }
}

我想列出 productsoffice.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();