【发布时间】:2019-07-17 18:02:10
【问题描述】:
我知道要对关系的元素进行排序,我们使用 with 并传递一个函数来告诉 Eloquent 按关系的特定列排序
$query->with(['relation' => function ($query) {
$query->orderBy('columName', 'ASC');
}]);
我尝试对表之间的关系进行动态排序和过滤,因为我发送了 relation.fieldrelation 格式以进行排序或搜索,就像我从 eloquent 或 QueryBuilder 执行此操作一样,因此它可以动态地工作并适用于任何模型和有什么关系吗?
这个方法我有一个特点,它可以适用于任何模型和任何关系,但它不能正确排序和搜索,即按其字段对基本模型的记录进行排序和搜索关系 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%");
}
}
}
【问题讨论】:
-
请添加整个
GetDataTable()方法。 -
@JonasStaudenmeir 我已经添加了它,我也使用了范围,我希望它有助于更好地理解我的尝试
-
“订单不正确”是什么意思?
-
@JonasStaudenmeir 您应该按照您的关系字段对父模型的记录进行排序,如果您通过请求relation.name 发送,您应该根据您的关系名称对模型记录进行排序。
-
请提供一个包含关系、
$request对象和执行查询的最小示例。
标签: php laravel laravel-5 eloquent