Laravel中多对多关系模型对雄辩模型的排序

Laravel中多对多关系模型对雄辩模型的排序,laravel,eloquent,laravel-5.8,Laravel,Eloquent,Laravel 5.8,我正在Laravel 5.8上构建一个应用程序,其中有一个名为公司,技术说明,州,地区。一家公司可以在多个州拥有多个地点,因此公司和州/地区之间存在着多对多关系。所以我的模型看起来像这样: public function companies() { return CompanyResource::collection( Company::when($request->name, function ($q) use($request) { $q

我正在
Laravel 5.8
上构建一个应用程序,其中有一个名为
公司
技术说明
地区
。一家公司可以在多个州拥有多个地点,因此公司和州/地区之间存在着
多对多
关系。所以我的模型看起来像这样:

public function companies() {
    return CompanyResource::collection(
        Company::when($request->name, function ($q) use($request) {
            $q->where('name', 'like', '%' . $request->name .'%');
        })
        ->select('companies.*', 's.name as state_name')
        ->join('company_technical_description', 'companies.id', '=', 'company_technical_description.company_id')
        ->join('company_state as cs', 'company_state.company_id', '=', 'companies.id')
        ->join('states as s', 'cs.state_id', '=', 's.id')
        ->when($request->sort_by_column, function ($q) use($request) {
            $q->orderBy($request->sort_by_column['column'], $request->sort_by_column['order'] );
        }, function ($q) use($request){
            $q->orderBy('updated_at', 'desc');
        })
        ->paginate();
    )
}
class公司扩展模型{
使用软删除;
受保护的$guarded=[];
公共职能状态()
{
返回$this->belongtomany('App\State','company\u State','company\u id','State\u id');
}
公共职能区()
{
返回$this->belongtomany('App\Region','company\u Region','company\u id','Region\u id');
}
公共职能技术说明()
{
返回$this->hasOne('App\TechnicalDescription','company_id','id');
}
}
我现在正在构建一个
数据表
,其中我将
公司名称
技术细节
地区
作为表头。我想根据这些关系进行排序,因此我尝试在控制器中:

公共职能公司(){
return CompanyResource::collection(
公司::当($request->名称,函数($q)使用($request){
$q->where('name'、'like'、'%'。$request->name'%');
})
->加入('company\u technical\u description'、'companys.id'、'='、'company\u technical\u description.company\u id')
->当($request->按列排序时,函数($q)使用($request){
$q->orderBy($request->sort_by_column['column'],$request->sort_by_column['order']);
},函数($q)使用($request){
$q->orderBy('updated_at','desc');
})
->分页();
)
}
因此,在这种情况下,如果我想根据技术描述的任何细节进行排序,只需在
$request->sort\u by_column['column']
中按
公司技术说明。确定日期
即可轻松排序

但是在
状态
区域
之间存在多对多关系的情况下,我几乎不知道如何继续


帮我解决这个问题。谢谢

我知道如何使用
连接
,为我处理数据表的动态顺序

您可以尝试以下方法:

public function companies() {
    return CompanyResource::collection(
        Company::when($request->name, function ($q) use($request) {
            $q->where('name', 'like', '%' . $request->name .'%');
        })
        ->select('companies.*', 's.name as state_name')
        ->join('company_technical_description', 'companies.id', '=', 'company_technical_description.company_id')
        ->join('company_state as cs', 'company_state.company_id', '=', 'companies.id')
        ->join('states as s', 'cs.state_id', '=', 's.id')
        ->when($request->sort_by_column, function ($q) use($request) {
            $q->orderBy($request->sort_by_column['column'], $request->sort_by_column['order'] );
        }, function ($q) use($request){
            $q->orderBy('updated_at', 'desc');
        })
        ->paginate();
    )
}
我没有测试这个解决方案,但它是一个好的开始。如果您现在将
state\u name
作为排序参数传递,则排序应该有效。但我不确定您的数据库表和列中是否存在,所以请将
连接设置为工作

我认为这是个好主意

祝你好运