php – 如何通过关系动态Laravel和Eloquent对结果进行排序

我知道为了对关系的元素进行排序,我们使用并传递一个函数告诉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();

这将使您通过货币名称获得货币订单的所有国家/地区.

您必须将模型更改为模型以及与关系的关系.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...