0
我想產生這樣一個查詢封閉:動態生成基於輸入搜索(Laravel/Elequent)
select * from `recipes`
where ((`menu` LIKE '%dinner%' or `menu` LIKE '%lunch%')
and (`type` LIKE '%steak%' or `soort` LIKE '%chicken%'))
order by RAND() asc limit 1
雖然我的輸入是這樣的:
"menu1" => "dinner" "menu2" => "lunch" "type1" => "steak" "type2" => "chicken"
這就是我的代碼現在的樣子PHP:
foreach ($input as $key => $value) {
$key = preg_replace('/[0-9]+/', '', $key);
if($oldKey == $key){
$andOr = 'OR';
} else {
$andOr = 'AND';
}
if($oldKey == $key)
{
$query->where(function($query) use ($key, $value){
$query->where($key, "LIKE", "%$value%");
});
} else {
$query->orWhere(function($query) use ($key, $value)
{
$query->orWhere($key, "LIKE", "%$value%");
});
}
}
$oldKey = $key;
});
$recipe = $query->orderBy(DB::raw('RAND()'))->limit(1)->get();
但遺憾的是這產生這樣的事情:
select * from `recipes`
where ((`menu` LIKE '%dinner%')
or (`menu` LIKE '%lunch%')
or (`type` LIKE '%steak%')
or (`type` LIKE '%chicken%'))
order by RAND() asc limit 1
這是不正確的。
我想使這段代碼動態,所以我可以給它或多或少的輸入變量,並仍然生成「有效」的查詢。有效的我的意思是括號放在第一個查詢中。
我希望我把所有事情都清楚了,謝謝你的幫助!