【问题标题】:orWhere Query in Laravel Query Builder [duplicate]Laravel 查询生成器中的 orWhere 查询 [重复]
【发布时间】:2018-06-26 13:40:18
【问题描述】:

我试图查找不是免费产品且产品状态为活动的产品,即 1,但问题是它不能按照我想要的方式使用以下查询。它为我想要的匹配项提供了非活动和免费的产品集合。如何通过修改以下查询获得适当的输出? 这里$query是搜索关键字

$products = DB::table('products')                       
            ->where('products.name' , 'like', '%'.$query.'%')
            ->orWhere('products.tags','like','%'.$query.'%')               
            ->where('products.status','=',1)    
            ->where('products.price','!=',0)            
            ->groupBy('products.id')
            ->latest()
            ->paginate(3);

【问题讨论】:

    标签: php mysql laravel query-builder


    【解决方案1】:

    你需要封装你的 orWhere :

    $products = DB::table('products')
            ->where(function($q) use ($query){    
                $q->where('products.name' , 'like', '%'.$query.'%')
                ->orWhere('products.tags','like','%'.$query.'%');
            })               
            ->where('products.status','=',1)    
            ->where('products.price','!=',0)            
            ->groupBy('products.id')
            ->latest()
            ->paginate(3);
    

    应该呈现类似

    SELECT * FROM 'products' 
    WHERE (
        products.name like '%query%' OR 
        products.tags like '%query%'
    ) AND 
    products.status = 1 AND 
    products.price <> 0
    GROUP BY products.id
    

    【讨论】:

    • 我已经尝试过了,但它会抛出错误
    • 抛出什么错误?
    猜你喜欢
    • 2016-11-16
    • 1970-01-01
    • 2015-02-22
    • 2015-02-26
    • 2018-05-16
    • 2015-12-13
    • 1970-01-01
    • 2023-04-05
    • 2017-08-13
    相关资源
    最近更新 更多