我正在尝试使用$httpParamSerializer(params);
和Laravel whereIns
为我的Angular App和Laravel 5.1 API构建自己的动态过滤。
我的目标是传递一组我想要过滤的字段和值,并深入查看我需要的记录。
我遍历Laravel中的字段并执行whereIns
,然后将它们分组到一个数组中,删除重复项。不幸的是,这更像是 OR 而不是 AND ,因为每个whereIn
都会进行新搜索以匹配。
前端查询:
var filters = {
'review[]' : ['no', 'yes'],
'user_id[]' : [1]
};
HTTP网址:“http://dde-api.localhost/1.0/userquestions?review%5B%5D=no&review%5B%5D=yes&user_id%5B%5D=1”
DB:
Laravel:
$results = [];
// Loop through each field (`review`, `users`, etc..), then search thru array of params
foreach ($input as $filter_field => $filters_array) {
if ($this->validField($table, $filter_field)) {
$res = DB::table($table)->whereIn($filter_field, $filters_array)->get();
if (!in_array($res, $results)) {
array_push($results, $res);
}
我需要将查询作为多个WHERE
子句( AND ,而不是 OR )进行循环,并将where
子句附加到field
子句中每个yes
($ filter_field),然后搜索匹配的字段值。
因此,结果应该是用户no
的所有1
和review: yes
条记录。由于用户1没有user_id: 4
的记录,因此它使用## Load dplyr package for data manipulation
library("dplyr")
## Genes where "Low" value is >0.5
genes <- mydatam[mydatam$variable == "Low" & mydatam$value > 0.5, "Gene"]
## Add new column
newdat <- mutate(mydatam, newval = ifelse(Gene %in% genes, ">0.5", "<=0.5"))
中的记录。这很糟糕。
当我遍历多个字段时,如何将多个 WHERE 语句附加到一个查询?
答案 0 :(得分:1)
像这样使用你的循环
$dbTbOBJ = \DB::table("table_name")
// Loop through each field (`review`, `users`, etc..), then search thru array of params
foreach ($input as $filter_field => $filters_array) {
$dbTbOBJ->whereIn($filter_field, $filters_array);
}
$results = $dbTbOBJ->get()