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
作为排序参数传递,则排序应该有效。但我不确定您的数据库表和列中是否存在,所以请将连接设置为工作
我认为这是个好主意
祝你好运