Laravel 5 Laravel 5.4雄辩关系和局部范围

Laravel 5 Laravel 5.4雄辩关系和局部范围,laravel-5,relationship,Laravel 5,Relationship,我使用的是Laravel5.4,有两种型号,用户和省份 在模型用户中: public function scopeWithSort($query, $sorting, $by) { return $query->orderBy($sorting, $by); } public function province() { return $this->belongsTo('App\Province', 'loctio

我使用的是Laravel5.4,有两种型号,用户和省份

在模型用户中:

    public function scopeWithSort($query, $sorting, $by)
    {
        return $query->orderBy($sorting, $by);
    }
    public function province()
    {
        return $this->belongsTo('App\Province', 'loction_id');
    }
在控制器用户中:

$query = User::with('province')->select('*');
if ($request->sorting == 'location_id') {
   $query->withSort('provinces.name', $request->by); // ** error line
}

如何使用此关系进行排序。谢谢你

您必须使用不同的方法

您可以使用修改后的
withCount()
对查询进行排序:

if($request->sorting==“location\u id”){
$query->withCount(['province'=>函数($query){
$query->select('name');
}])->订货人('province\u count',$request->by);
}
或者对查询结果进行排序:

$users=$query->get();
如果($request->sorting==“location\u id”){
$users=$users->sortBy('province.name',$request->by);
}

谢谢您的回复!但是为什么要使用
with count()
?此外,我还使用分页,因此如果无法在分页后调用排序。
withCount()
只是从
省关系创建子查询的一种方便方法。您还可以使用
DB::raw()
使用原始SQL添加子查询。加入
表是另一种可能的解决方案。是的,我明白了。事实上,我的团队要求在控制器中使用纯雄辩,而不是使用查询生成器。不管怎样,有什么解决办法吗?我不知道你在这方面的区别。难道你不认为
withCount()
解决方案是“纯粹的雄辩”吗?我(和其他人)将以
User::
开头的查询视为“雄辩的”,将
DB::table('users')
等查询视为“查询生成器”