laravel在循环中追加以执行AND过滤

时间:2016-07-06 03:28:58

标签: php mysql angularjs laravel laravel-5.1

我正在尝试使用$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:

enter image description here

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的所有1review: 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 语句附加到一个查询?

1 个答案:

答案 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()