具有where-functions限制的Laravel查询构建器

时间:2016-01-25 18:29:20

标签: php laravel laravel-5.2

我试图通过用户可以进行的选择进行排序,其中项目存储在数据库中的“类型”表中。我正在使用Laravel 5.2。

多重选择功能的屏幕截图(丹麦文字):

enter image description here

他们可以选择(在多选中):

  • 苹果
  • 香蕉
  • 椰子
  • 西瓜

如果他们只选择Apple,则应显示所有苹果 - 足够简单。 但如果他们同时选择苹果和椰子,苹果和椰子都应该展示出来。

$query = User::where('type', '=', 'Apple')->get(); 

得到所有的苹果。

但如果我这样做:

$query = User::where('type', '=', 'Apple')->where('type', '=', 'Coconut')->get();

仅显示已选择Apple和Coconut的用户。用户不可能在后端选择苹果和椰子,因此不会显示任何用户。

如何构建查询,其中在后端选择了Apple或Coconut类型的用户将通过构建查询来显示,该查询不限制输出仅在用户选择了两者时(这是不可能的)对于用户)?

2 个答案:

答案 0 :(得分:2)

您可以使用:

$query = User::where(function($query) {
$query->where('type', '=', 'Apple')
->orWhere('type', '=', 'Coconut');
)}->get();

这将获得椰子和苹果..

答案 1 :(得分:1)

如果您希望将结果限制为Apple Coconut,则应使用正确的->orWhere()语句,而不是另一个->where()。默认情况下,链接->where()子句将导致WHERE ... AND ... AND ...。将您的$query更改为:

$query = User::where('type', '=', 'Apple')->orWhere('type', '=', 'Coconut')->get();

将导致查询WHERE ... OR ...,并将结果限制为AppleCoconut