如何使用可选部分格式化 Laravel Eloquent 查询
How to format Laravel Eloquent query with optional sections
我是 Laravel 的新手,但正在努力解决 Eloquent 查询如何具有可选部分的问题。
我现在有以下 Eloquent 查询:
Posts::where('approved', '=', 'Y')->orderBy('created_at', 'DESC')->take($noofposts)->skip($skipno)->get();
效果很好。但是我现在需要添加两个可选部分,我想这样做而不必每次都重复查询。
如果存在 $x(这是一个数组),我需要添加 AND WHERE userid=$x(循环一次或多次),如果不存在,则应忽略...最后添加 AND ( WHERE status=$y[0] OR $status=$y[1] OR $status=$y[2]) - 如果未设置状态标志,则忽略。
基本上,如果没有设置标志,我会以原始查询结束,但如果是,我们会得到
Posts::where('approved', '=', 'Y')->where('userid', '=', '2')->where('userid', '=', '23')->where('status', '=', 'K')->orWhere('status', '=', 'N')->orderBy('created_at', 'DESC')->take($noofposts)->skip($skipno)->get();
我可以在正常 PHP 中完美地计算它,但无法理解它在 Laravel Eloquent 中如何工作。
谁能指出我正确的方向?用户指南和任何网站示例似乎都没有考虑这种情况!
拳头,而不是链接 orWhere 我会使用 Eloquent 的 whereIn 函数。
whereIn('status', $y);
问题是,如果 $y 为空,请求将无法工作。 (我认为它只是崩溃)
因此,如果您想避免控制并保持代码整洁,您可以在 Post 模型中添加一个查询范围。
http://laravel.com/docs/4.2/eloquent#query-scopes
scopeOptionalWhereIn($query, $field, $array){
if(!empty($array))
return $query->whereIn($field, $array);
return $query; //return unchanged query
}
然后您可以在查询中使用此范围:
Posts::where('approved', '=', 'Y')
->optionalWhereIn('status', $y)
->orderBy('created_at', 'DESC')
->take($noofposts)
->skip($skipno)->get();
您或许可以使用相同的作用域来处理 userid 条件。
我是 Laravel 的新手,但正在努力解决 Eloquent 查询如何具有可选部分的问题。
我现在有以下 Eloquent 查询:
Posts::where('approved', '=', 'Y')->orderBy('created_at', 'DESC')->take($noofposts)->skip($skipno)->get();
效果很好。但是我现在需要添加两个可选部分,我想这样做而不必每次都重复查询。
如果存在 $x(这是一个数组),我需要添加 AND WHERE userid=$x(循环一次或多次),如果不存在,则应忽略...最后添加 AND ( WHERE status=$y[0] OR $status=$y[1] OR $status=$y[2]) - 如果未设置状态标志,则忽略。
基本上,如果没有设置标志,我会以原始查询结束,但如果是,我们会得到
Posts::where('approved', '=', 'Y')->where('userid', '=', '2')->where('userid', '=', '23')->where('status', '=', 'K')->orWhere('status', '=', 'N')->orderBy('created_at', 'DESC')->take($noofposts)->skip($skipno)->get();
我可以在正常 PHP 中完美地计算它,但无法理解它在 Laravel Eloquent 中如何工作。
谁能指出我正确的方向?用户指南和任何网站示例似乎都没有考虑这种情况!
拳头,而不是链接 orWhere 我会使用 Eloquent 的 whereIn 函数。
whereIn('status', $y);
问题是,如果 $y 为空,请求将无法工作。 (我认为它只是崩溃)
因此,如果您想避免控制并保持代码整洁,您可以在 Post 模型中添加一个查询范围。
http://laravel.com/docs/4.2/eloquent#query-scopes
scopeOptionalWhereIn($query, $field, $array){
if(!empty($array))
return $query->whereIn($field, $array);
return $query; //return unchanged query
}
然后您可以在查询中使用此范围:
Posts::where('approved', '=', 'Y')
->optionalWhereIn('status', $y)
->orderBy('created_at', 'DESC')
->take($noofposts)
->skip($skipno)->get();
您或许可以使用相同的作用域来处理 userid 条件。