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

问题描述 投票:2回答: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类型的用户将通过构建查询来显示,该查询仅在用户选择了两者时才限制输出(这对于用户来说是不可能的) )?

php laravel laravel-5.2
2个回答
2
投票

您可以使用:

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

这将获得椰子和苹果..


1
投票

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

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

将导致查询WHERE ... OR ...,并将您的结果限制为Apples或Coconuts。

© www.soinside.com 2019 - 2024. All rights reserved.