有人可以向我展示如何使用Eloquent编写此查询吗?
SELECT * FROM `projects` WHERE `id`='17' OR `id`='19'
我在思考
Project::where('id','=','17')
->orWhere('id','=','19')
->get();
在这种情况下,我的变量(17和19)是来自多选框,因此基本上是一个数组。有什么线索可以动态循环遍历并添加这些where/orWhere子句的吗?
谢谢。
有人可以向我展示如何使用Eloquent编写此查询吗?
SELECT * FROM `projects` WHERE `id`='17' OR `id`='19'
我在思考
Project::where('id','=','17')
->orWhere('id','=','19')
->get();
在这种情况下,我的变量(17和19)是来自多选框,因此基本上是一个数组。有什么线索可以动态循环遍历并添加这些where/orWhere子句的吗?
谢谢。
['myselect' => [11, 15, 17, 19], 'otherfield' => 'test', '_token' => 'jahduwlsbw91ihp']
的数组,它可能是 \Input::all();
的输出。
Project::where(function ($query) {
foreach(\Input::get('myselect') as $select) {
$query->orWhere('id', '=', $select);
}
})->get();
Project::whereIn('id', \Input::get('myselect'))->get();
$sql = \DB::table('projects');
foreach (\Input::get('myselect') as $select) {
$sql->orWhere('id', '=', $select);
}
$result = $sql->get();
对于这种情况,最好的方法是使用Laravel中等价于SQL的IN()
。
Project::whereIn('id', [17, 19])->get();
将与原来相同:
SELECT * FROM projects WHERE id IN (17, 19)
根据MySQL手册,此方法更加高效且更加美观。如果所有值都是常量,IN
会对列表进行排序,然后使用二分查找。
$projects = Projects::query();
foreach ($selects as $select) {
$projects->orWhere('id', '=', $select);
}
$result = $projects->get();
如果你的 Projects 模型有自定义方法并且需要从变量进行查询,那么这将非常有用。你无法在 orWhere 方法中传递 $selects
。
public function getSearchProducts($searchInput)
{
$products = Cache::rememberForever('getSearchProductsWithDiscountCalculationproducts', function () {
return DB::table('products_view')->get();
});
$searchProducts = $products->filter(function ($item) use($searchInput) {
return preg_match('/'.$searchInput.'/i', $item->productName) || preg_match('/'.$searchInput.'/i', $item->searchTags) ;
});
$response = ["status" => "Success", "data" => $searchProducts ];
return response(json_encode($response), 200, ["Content-Type" => "application/json"]);
}