【发布时间】:2017-03-22 00:24:39
【问题描述】:
我已经应用了一个 laravel 构建器来过滤用户在表单中的搜索输入,但它的效果并不理想。这是我的场景:
在第一个输入中是自定义查询搜索,其中创建了以下构建器。
return $builder->where('city', 'LIKE', '%' . $value . '%')
->orWhere('first_name', 'LIKE', '%' . $value . '%')
->orWhere('middle_name', 'LIKE', '%' . $value . '%')
->orWhere('last_name', 'LIKE', '%' . $value . '%');
这 3 个下拉菜单由以下代码过滤:
return $builder->where('location', $value); // <-- for "selecteer locatie"
return $builder->where('level', $value); // <-- for "selecteer richting"
return $builder->where('graduation', $value); // <-- for "selecteer diplomajaar"
$value 是用户的输入。
现在,每当我按 3 个下拉选项进行过滤时,它都会像魔术一样发挥作用。每当我尝试将它与第一个过滤器的查询结合使用时,它显示的结果比我实际想要的要多。
所以第一个查询给出了一个 OR 语句,这实际上是错误。我想在可以运行的构建器中放置一个 RAW SQL 语句
"WHERE `city` LIKE %" . $value . "%
OR `first_name` LIKE %" . $value . "
OR `middle_name` LIKE %" . $value . "
OR `last_name` LIKE %" . $value . "
在这些符号之间( 'statement' )
有没有一种方法可以单独运行构建器,或者有一种方法可以在 laravel 5.3 构建器中输入原始 SQL 语句?
如果您需要更多信息,请询问。
编辑:我的问题还不够清楚!请参阅下面的说明。
我正在使用 Builder 类在我的表单中制作我的 SQL 过滤器。每当我运行高级搜索并转储我的 Builder 时,我都会在 +where 子句中得到一个带有以下数组的 Builder 对象:
+wheres: array:7 [▼
0 => array:5 [▼
"type" => "Basic"
"column" => "city"
"operator" => "LIKE"
"value" => "%hof%"
"boolean" => "and"
]
1 => array:5 [▼
"type" => "Basic"
"column" => "first_name"
"operator" => "LIKE"
"value" => "%hof%"
"boolean" => "or"
]
2 => array:5 [▼
"type" => "Basic"
"column" => "middle_name"
"operator" => "LIKE"
"value" => "%hof%"
"boolean" => "or"
]
3 => array:5 [▼
"type" => "Basic"
"column" => "last_name"
"operator" => "LIKE"
"value" => "%hof%"
"boolean" => "or"
]
4 => array:5 [▼
"type" => "Basic"
"column" => "location"
"operator" => "="
"value" => "Franeker"
"boolean" => "and"
]
5 => array:5 [▼
"type" => "Basic"
"column" => "level"
"operator" => "="
"value" => "MAVO"
"boolean" => "and"
]
6 => array:5 [▼
"type" => "Basic"
"column" => "graduation"
"operator" => "="
"value" => "1992"
"boolean" => "and"
]
]
因为我使用 OR 运算符与 city、first_name、middle_name 或 last_name 进行比较,所以我应该得到 4 where 子句而不是 7。这是因为 Builder 将第一个输入中调用的 OR 语句视为 AND 语句。
【问题讨论】:
标签: php sql laravel-5.3