我知道要对关系的元素进行排序,我们使用with并传递一个函数,以通过关系的特定列告诉Eloquent进行排序
$query->with(['relation' => function ($query) {
$query->orderBy('columName', 'ASC');
}]);
我尝试动态地对表之间的关系进行排序和过滤,因为我是通过雄辩的或QueryBuilder来执行对order.fieldrelation格式的排序或搜索,因此它可以动态地适用于任何模型和有关系吗?
我具有一种特质,该方法可以适用于任何模型和任何关系,但是不能正确排序和搜索,也就是说,无法通过其字段对基本模型的记录进行排序和搜索关系where('relation.campo','like','$data');
和oderBy('relacion.campo','ASC');
如何使用Eloquent来完成,或者是否必须使用queryBuilder?
从控制器上我打得很好
return Model::with('relation')->GetDataTable($request);
在我的Trait方法GetDataTable中
public function scopeGetDataTable($query,$request)
{
$query = $query->searching($request->search);
if ($request->per_page == -1 ) {
$perPage = $query->count();
}else{
$perPage =$request->per_page;
}
if ($request->sortBy == 'null' ) {
$ordercolumn ='id';
}else{
$ordercolumn =$request->sortBy;
}
$order =$request->order;
$pos = strpos($ordercolumn, '.');
if ($pos !== false) {
$column = explode(".", $ordercolumn);
return $query->with([$column[0] => function ($query) use ($column,$order){
$query->orderBy($column[1],$order ?? 'ASC');
}])->paginate($perPage);
}else{
return $query->orderBy($ordercolumn ?? 'id', $order ?? 'ASC')
->paginate($perPage);
}
}
在我的模型中,我有一个示波器
public function scopeSearching($query, $que)
{
$columns = ['id','','',....];
foreach($columns as $column){
$query->orWhere($column, 'LIKE', "%$que%");
}
}
}
答案 0 :(得分:0)
您可以做这样的事情
SELECT perusahaan.id_perusahaan, perusahaan.namaprshn, petugas.id_petugas, petugas.namaptgs, dokumen.id_dokumen, dokumen.negara_spr FROM perusahaan INNER JOIN petugas ON perusahaan.id_perusahaan=petugas.id_perusahaan INNER JOIN dokumen ON petugas.id_petugas=dokumen.id_petugas
如果您只想要国家数据而没有货币数据,请在查询中添加一个选择
$results = \App\Country::join('currencies', 'currencies.id', '=', 'countries.currency_id')->orderBy('currencies.name')->get();
这将使您获得所有通过货币名称进行货币订购的国家/地区。
您必须将模型更改为模型,并将关系更改为关系。
答案 1 :(得分:0)
您可以使用嵌套关系排序和将现有查询与Eloquent一起使用。
示例:
$relation_sort = 'asc';
$nested_sort = 'desc';
$result = Model::with([
'relation' => function($query) use($relation_sort){
$query->orderBy('relation_column', $relation_sort);
},
'relation.nested' => function($query) use($nested_sort){
$query->orderBy('nested_relation_column', $nested_sort);
}
])->whereHas('relation', function($query){
//Relation exists check.
$query->where('price', '>', 100);
})->whereHas('relation.nested', function($query) use($search_param){
//Nested Relation search.
$query->where('search_column', 'LIKE', $search_param);
})->get();