Laravel查询生成器如何忽略特定列

Laravel查询生成器如何忽略特定列,laravel,Laravel,我很难构建一个查询来过滤掉所有列hidden==false的产品,逻辑是如果勾选了hidden属性,它将不会选择这些“hidden”行 这是我的代码: $products = DB::table('view_product') ->join('brand', 'view_product.brand_id', '=', 'brand.id') ->join('category', 'view_product.category_id', '

我很难构建一个查询来过滤掉所有列hidden==false的产品,逻辑是如果勾选了hidden属性,它将不会选择这些“hidden”行

这是我的代码:

$products = DB::table('view_product')
            ->join('brand', 'view_product.brand_id', '=', 'brand.id')
            ->join('category', 'view_product.category_id', '=', 'category.id')
            ->select('view_product.*', 'brand.name as brand_name','category.name as category_name')
            ->orwhere("brand.name", "LIKE", "%$search%")
            ->orWhere("category.name", "LIKE", "%$search%")
            ->orWhere("view_product.name", "LIKE", "%$search%")
            ->whereNotIn('hidden' , true)
            ->paginate(9);
如何编写此查询以便它可以过滤掉“隐藏”行?

请尝试以下操作:

$products = DB::table(function($query) use (...){
     return $query->join('brand', 'view_product.brand_id', '=', 'brand.id')
        ->join('category', 'view_product.category_id', '=', 'category.id')
        ->select('view_product.*', 'brand.name as brand_name','category.name as category_name')
        ->orwhere("brand.name", "LIKE", "%$search%")
        ->orWhere("category.name", "LIKE", "%$search%")
        ->orWhere("view_product.name", "LIKE", "%$search%");
 }, 'view_product')->where('hidden' , false)->paginate(9);
因为您需要对该
->where('hidden',false)
进行子查询,否则
或where
将使条件
为true

此代码对我有效

$products = DB::table(function($query){
                return $query
                ->select('*')
                ->from('view_product')
                ->where('hidden' , false);                
            }, 'view_product')
                    ->join('brand', 'view_product.brand_id', '=', 'brand.id')
                   ->join('category', 'view_product.category_id', '=', 'category.id')
                   ->select('view_product.*', 'brand.name as brand_name','category.name as category_name')
                   ->orwhere("brand.name", "LIKE", "%$search%")
                   ->orWhere("category.name", "LIKE", "%$search%")
                   ->orWhere("view_product.name", "LIKE", "%$search%")
                   ->paginate(9);

抱歉,在vscode上,它在使用时显示错误行(…)?它说语法错误,意外的“…”(T_省略号),预期的“&”或变量(T_变量)我在这里做错了什么?@phatx88
use(…)
是伪代码;您需要在这里实际填写变量,在您的情况下
使用($search)
@TimLewis谢谢