我知道为了对关系的元素进行排序,我们使用并传递一个函数告诉Eloquent按关系的特定列排序
$query->with(['relation' => function ($query) {
$query->orderBy('columName', 'ASC');
}]);
我尝试动态地对表之间的关系进行排序和过滤,因为我发送了relation.fieldrelation格式来订购或搜索,就像我从eloquent或QueryBuilder那样做,这样它可以动态地工作,适用于任何模型和任何关系?
这个方法我有一个特性,它可以适用于任何模型和任何关系,但它没有正确排序和搜索,也就是说,通过其关系的字段排序和搜索基础模型的记录在哪里( ‘relation.campo’, ‘喜欢’, ‘$数据’);和oderBy(‘relacion.campo’,’ASC’);如何使用Eloquent完成,或者我必须使用queryBuilder if或者什么?
从控制器我打电话好
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%");
}
}
}
解决方法:
你可以做这样的事情
$results = \App\Country::join('currencies', 'currencies.id', '=', 'countries.currency_id')->orderBy('currencies.name')->get();
如果您只想要没有货币数据的国家/地区数据,请在查询中添加一个选择
$results = \App\Country::join('currencies', 'currencies.id', '=', 'countries.currency_id')->select('countries.*')->orderBy('currencies.name')->get();
这将使您通过货币名称获得货币订单的所有国家/地区.
您必须将模型更改为模型以及与关系的关系.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。