或在有口才的情况下

时间:2018-08-07 11:30:00

标签: mysql laravel eloquent

我正在雄辩地编写以下查询:

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会返回错误的结果。基本上,我想知道如何在上面的原始查询中使用(condition1 AND condition2) OR condition3语法来模仿我完成的工作。

3 个答案:

答案 0 :(得分:1)

尝试

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

答案 1 :(得分:0)

尝试

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

答案 2 :(得分:-1)

我没有对此进行测试,对不起,如果它不起作用。但是我认为这些解决方案之一可以起作用。

$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.'%');
});