laravel - 通过Laravel Eloquent中的json_encode变量查询

我正在构建这个应用程序,它有一些动态生成的 filter 复选框(在 HTML 中,使用 PHP),以便用户可以通过 filter 看到他想查看的内容。 filters 是按类型和分类的,可以添加新的分类,添加时动态添加到filter 字段中。我想要做的是,如果用户选择超过 1 个类别,它将显示这两个类别的内容。我的 filter 控制器是这样的:

if(isset($_POST['categorias'])){
        $categorias = $_POST['categorias'];
    } 
    if(isset($_POST['tipos'])){
        $tipos= $_POST['tipos'];
    }

然后我回来

return view('home', ['filter' => json_encode($categorias), 'tipo' => $tipos]);

我试图通过这样的内容 filter :

$collection = DB::table('files')->where('categoria', 'like', '%' . $filter . '%')
                                ->where('tipo', $tipo)
                                ->take(8)
                                ->get();

但是没有返回任何内容......当我删除查询中的“喜欢”并且只选择 1 个类别时,它可以工作,并显示该类别的内容,但我需要用户能够选择超过 1 个 ..

回答1

这是假设 $categories 是一个类别名称的数组。您可以使用 whereIn 来检查包含每个类别名称的数组,而不是使用 like 子句。

// Decode your categories back into an array.
$categorias = json_decode( $filter );

// Use whereIn with your array of category names.
$collection = DB::table('files')->whereIn( 'categoria', $categorias )
                                ->where('tipo', $tipo)
                                ->take(8)
                                ->get();

相似文章

最新文章