我需要生成这样的sql:
...where (col1 like '%a1%' or col2 like '%a1%') and (col1 like '%a2%' or col2 like '%a2%') and ...... and (col1 like '%an%' or col2 like '%an%')
我知道我可以使用"参数分组"来做到这一点,
->where(function ($query) {
$query->where('col1', 'like', '%a1%')
->orWhere('col2', 'like', '%a1%');
})
->where(function ($query) {
$query->where('col1', 'like', '%a2%')
->orWhere('col2', 'like', '%a2%');
})
......
但是我怎么循环这个呢?因为中的参数是一个json数组,类似于"[a1,a2,…,an]",
foreach ()
{
->where(function ($query) {
$query->where('col1', 'like', '%an%')
->orWhere('col2', 'like', '%an%');
})
}
->get;
像这样的东西应该可以工作,
$listing = Listing:where('id', $id);
foreach ($input as $key => $value) {
$i++;
// ->where('field_1', red_1); // Desired output
$listing->where("where(field_{$i},".$value."_1)");
}
$results = $listing->get();
您可以使用数组(我称之为$data(在闭包内部执行foreach循环,假设您使用的是MySQL,则可以使用concat组合col1和col2,然后使用原始查询(如果表中有空值,我也使用了聚结(。
->where(function ($query) use ($data) {
foreach ($data as $value) {
$query->whereRaw("concat(coalesce(`col1`, ''), ' ', coalesce(`col2`, '')) like ?", ['%'.$value.'%']);
}
})
->get();