我想创建一个where子句,它是一个和,带有或者列表.这是我的代码:
$searchLoop = array(
'u.Name',
'u.Email',
'n.Name',
'u.PhoneMobile'
);
$text = 'Manager';
$count = 0;
foreach ($searchLoop as $loop) {
$query->where(function ($where) use ($loop, $count, $text) {
if ($count === 0) {
$where->where($loop, 'like', '%' . $text . '%');
} else {
$where->orWhere($loop, 'like', '%' . $text . '%');
}
});
$count++;
}
Run Code Online (Sandbox Code Playgroud)
基于我对laraval文档和其他搜索的阅读,我希望这样翻译:
and (
`u`.`Name` like '%Manager%'
or `u`.`Email` like '%Manager%'
or `n`.`Name` like '%Manager%'
or `u`.`PhoneMobile` like '%Manager%'
)
Run Code Online (Sandbox Code Playgroud)
相反,它转换为:
and (`u`.`Name` like '%Manager%')
and (`u`.`Email` like '%Manager%')
and (`n`.`Name` like '%Manager%')
and (`u`.`PhoneMobile` like '%Manager%')
Run Code Online (Sandbox Code Playgroud)
此外,如果我在$ query-> where where函数中使用$ where-> where(我是否只为每个循环执行orWhere等),它似乎并不重要,它仍然只有和.
我在这里先向您的帮助表示感谢.
感谢所有帮助过的人.我终于能够弄明白这一点,坚持查询函数内部的foreach解决了问题
$query - > where(function($where) use($searchLoop, $text) {
foreach($searchLoop as $count => $loop) {
if ($count === 0) {
$where - > where($loop, 'like', '%'.$text.
'%');
} else {
$where - > orWhere($loop, 'like', '%'.$text.
'%');
}
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
377 次 |
| 最近记录: |