orwhere具有多个条件

biswetbf  于 2021-06-23  发布在  Mysql
关注(0)|答案(3)|浏览(267)

我想用雄辩的语言写下以下问题:

select * from stocks where (symbol like '%$str%' AND symbol != '$str' ) OR name like '$str%'

没有最后一个条件,很简单:

$stocks = Stock::live()
        ->where('symbol','like','%'.$str.'%')
        ->where('symbol','!=',$str)
        ->get();

但是添加 orWhere('name','like',$str.'%') 两人之后 where s返回不正确的结果。基本上我想知道如何通过使用 (condition1 AND condition2) OR condition3 上面原始查询中的语法。

wvmv3b1j

wvmv3b1j1#

尝试

$stocks = Stock::live()
           ->where('name', 'like' , '%'.$str.'%')
           ->orWhere(function($query) use($str) {
                $query->where('symbol','like','%'.$str.'%')
                      ->where('symbol','!=',$str); // corrected syntax 
           })->get();
z9smfwbn

z9smfwbn2#

我没有测试这个,如果它不起作用,很抱歉。但我认为其中一个解决方案是可行的。

$stocks = Stock::live()
        ->where([
            ['symbol','like','%'.$str.'%'],
            ['symbol', '!=', $str],
        ])
        ->orWhere('name','like', $str.'%')
        ->get();

->where(function ($query) use ($str) {
    $query->where([
            ['symbol','like','%'.$str.'%'],
            ['symbol', '!=', $str],
        ]);
})
->orWhere(function ($query) use ($str) {
    $query->where('name','like', $str.'%');
});
kxxlusnw

kxxlusnw3#

尝试

$stocks = Stock::live()->where('name', 'like' , '%'.$str.'%')
           ->orWhere(function($query) use($str) {
                $query->where('symbol','like','%'.$str.'%')
                      ->where('symbol','!=',$str) 
           })->get();

相关问题