Javascript Laravel:如何使用分页和;滤波器

Javascript Laravel:如何使用分页和;滤波器,javascript,laravel,sorting,Javascript,Laravel,Sorting,我已经三天没有使用我的配置了。我不能按报告的模型进行排序,我尝试了许多方法,但没有得出结论,例如,sortBy/sortByDesc、join table但没有解决方案 我想执行分页、排序和服务器端过滤器。过滤器可以是多个。除了按相关模型排序外,其他一切都正常工作 我得到网址:http://127.0.0.1:8000/api/user/list?page=1&limit=30&sort=user__created_at&direction=desc&search__user__name=Jam

我已经三天没有使用我的配置了。我不能按报告的模型进行排序,我尝试了许多方法,但没有得出结论,例如,sortBy/sortByDesc、join table但没有解决方案

我想执行分页、排序和服务器端过滤器。过滤器可以是多个。除了按相关模型排序外,其他一切都正常工作 我得到网址:
http://127.0.0.1:8000/api/user/list?page=1&limit=30&sort=user__created_at&direction=desc&search__user__name=James&search__group__name=Client

查询
search\uuuuu model\uuuu col
允许我在多个模型或列上链接多个搜索

这是我的密码:

    public static function pagination(Request $request, $model, $relation, $modelStringify)
    {
        $modelSortBy = explode('__', $request->query('sort'))[0]; // user
        $tableSortBy = explode('__', $request->query('sort'))[1]; // created_at
        $query       = $request->query(); // ['page' => 1, 'limit' => 30...]
        $direction   = $request->query('direction'); // desc
        try {

            $model = $model->with($relation);

            //TODO : orderBy relationship
            if ($modelSortBy === $modelStringify): // modelStringify = 'user'
                $model->orderBy($tableSortBy, $direction);
            else:
                 // sort server side here 
            endif;

            foreach (array_keys($query) as $q) {
                if (strpos($q, 'search__') === 0) {
                    $modelSearchBy = explode('__', $q)[1]; // ['user', 'group']
                    $tableSearchBy = explode('__', $q)[2]; // ['name', 'name']
                    $valueSearchBy = $query[$q];
                    if ($modelSearchBy === $modelStringify):
                        $model->where($tableSearchBy, 'like', $valueSearchBy . '%');
                    else:
                        $model->whereHas($modelSearchBy, function (Builder $q) use ($valueSearchBy, $tableSearchBy) {
                            $q->where($tableSearchBy, 'like', $valueSearchBy . '%'); // $valueSearchBy = ['James', 'Client']
                        });
                    endif;
                }
            }
            return $model;
        } catch (Exception $e) {
            return response()->json(['message' => $e], 400);
        }
    }
下面是属于组的
用户
示例:

return response()->json([
    'items' => Utils::pagination($request, new User(), [
        'group',
    ], 'user')->paginate($limit)->toArray()
]);
如何在此配置中通过相关模型引入排序

例如,对于按组名排序,我得到URL
&sort=group\uu name


谢谢你

这看起来在拉雷维尔不容易做到。有人建议在Laravel中使用一种语法,但Taylor解决了这个问题

在所有其他资源上,我都能找到人,但这不容易与您更通用的方法相匹配

Laravel最近还引入了“子查询增强”,包括按子查询值排序(在上搜索“雄辩的子查询增强”),但我不知道如何使用它使按雄辩的关系值排序更容易

我认为您最好的选择是使用第三方软件包,例如Github问题中链接到的软件包。安装后,只需创建一个新的基本模型类,该类使用
use-Fico7489\Laravel\EloquentJoin\Traits\EloquentJoin
use Fico7489\Laravel\EloquentJoin\Traits\EloquentJoin;
use Illuminate\Database\Eloquent\Model;

abstract class BaseModel extends Model
{
    use EloquentJoin;
然后,您将能够使用以下函数按关系进行排序:

$model->orderByJoin('<relationship>.<column>', $direction);
$model->orderByJoin('.',$direction);
上面的
关系
值是您在模型上定义的关系的名称

请记住,
orderByJoin
函数只支持
BelongsTo
有一个关系

要记住的另一点是,无论是Laravel还是Laravel eloquent join包都不能保护您免受列名称(或
orderByJoin
函数中的方向值)中SQL注入的影响。Laravel建议您对列名使用白名单:

PDO不支持绑定列名。因此,您不应允许用户输入指定查询引用的列名,包括“order by”列等。如果必须允许用户选择要查询的特定列,请始终根据允许列的白名单验证列名

$model->orderByJoin('<relationship>.<column>', $direction);