【问题标题】:Laravel Eloquent orWhere not working as expectedLaravel Eloquent orWhere 没有按预期工作
【发布时间】:2020-01-04 04:22:54
【问题描述】:

这个 Eloquent 查询似乎没有按预期工作。

如果我传入一个术语然后是类别然后是制造商,它会按预期工作,但只输入制造商会产生零结果,制造商也是如此。

这是我的网址... /products?term=12&category=2&manufacturer=3

这里是 toSql() 的转储 "select * from products where id = ? or model like ? or category_id = ? or manufacturer_id = ?"

        $term = $request->input('term');
        $category = $request->input('category');
        $manufacturer = $request->input('manufacturer');

        $products = Product::orWhere('id', $term)
               ->orWhere('model', 'like', "%{$term}%")
               ->orWhere('category_id', $category)
               ->orWhere('manufacturer_id', $manufacturer)
               ->get();

难倒,任何帮助将不胜感激。

【问题讨论】:

  • 如果url... /products?manufacturer=3 怎么办?
  • 有趣的是,如果我只是在 url 中传递制造商或类别,它会返回所有结果,这是否意味着它永远不会到达 orWhere 调用?
  • 是否有任何一个参数是强制性的...?
  • 如果term不为空,有没有办法只调用->orWhere('model', 'like', "%{$term}%")

标签: laravel eloquent


【解决方案1】:
$term = $request->input('term');
$category = $request->input('category');
$manufacturer = $request->input('manufacturer');

$products = Product::where(function ($query) use ($request,$term,$category,$manufacturer) {
if($request->filled('term'))
   $query->orWhere('model', 'like', "%{$term}%")->orWhere('id', $term);
if($request->filled('category'))
   $query->orWhere('category_id', $category);
if($request->filled('manufacturer'))
   $query->orWhere('manufacturer_id', $manufacturer);

})->latest()
->paginate(5);

【讨论】:

  • 谢谢卡兰!这个条件逻辑稍加修改就可以工作......
猜你喜欢
  • 2021-05-22
  • 1970-01-01
  • 2015-10-30
  • 2018-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-12
  • 2015-11-09
相关资源
最近更新 更多