我正在雄辩地编写以下查询:
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
语法来模仿我完成的工作。
答案 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.'%');
});