我目前有以下代码正在运行......
$searchString = $request->searchstring;
$searchValues = preg_split('/\s+/', $searchString, -1, PREG_SPLIT_NO_EMPTY);
$cards=Card::where(function ($q) use ($searchValues){
foreach($searchValues as $value){
$q->orWhere('firstname', 'like', "%{$value}%");
$q->orWhere('lastname', 'like', "%{$value}%");
$q->orWhere('cardset', 'like', "%{$value}%");
}
})->paginate(24);
当我做dd时,它正在生成以下sql ...
select * from "cards" where ("firstname" like ? or "lastname" like ? or "cardset" like ? or "firstname" like ? or "lastname" like ? or "cardset" like ?)
但我想要的sql应该是......
select * from "cards" where ("firstname" like ? or "lastname" like ? or "cardset" like ?) AND ("firstname" like ? or "lastname" like ? or "cardset" like ?)
我尝试过几件事,但似乎无法得到它。
感谢。
答案 0 :(得分:3)
获取以下sql查询
select * from "cards" where ("firstname" like ? or "lastname" like ? or "cardset" like ?) AND ("firstname" like ? or "lastname" like ? or "cardset" like ?)
试试这个..
$cards = Card::Query();
foreach($searchValues as $value)
{
$cards = $cards->where(function ($q) use ($value) {
$q->orWhere('firstname', 'like', "%{$value}%");
$q->orWhere('lastname', 'like', "%{$value}%");
$q->orWhere('cardset', 'like', "%{$value}%");
});
}
$cards = $cards->paginate(24);
答案 1 :(得分:1)
试试这个:
$cards = Card::where(function ($q) use ($searchValues){
foreach($searchValues as $value){
$q -> where(function($q) use($value){
$q->orWhere('firstname', 'like', "%{$value}%");
$q->orWhere('lastname', 'like', "%{$value}%");
$q->orWhere('cardset', 'like', "%{$value}%");
});
}
})
它产生:
select * from `cards` where ((`firstname` like ? or `lastname` like ? or `cardset` like ?) and (`firstname` like ? or `lastname` like ? or `cardset` like ?) and (`firstname` like ? or `lastname` like ? or `cardset` like ?))