【问题标题】:laravel when query with array requestslaravel 查询数组请求时
【发布时间】:2021-09-20 16:55:55
【问题描述】:

我在数组 $colors = collect($request->colors);中有颜色请求

当查询生成器不为空时,我正在尝试发出请求

$products = Product::when($colors, function ($query, $colors) {
   return $query->whereHas('colors', function (Builder $query) use ($colors) {
     $query->whereIn('slug',  $colors->toArray());
    });
 })

不应该是触发颜色查询

当我尝试时

when(!$colors->isEmpty(), function ($query, $colors)

当颜色请求中有数组数据时触发 但在内部查询它的返回 boolean 而不是原始数组数据

帮助!

【问题讨论】:

  • 第一个参数将始终被评估为truefalse,因此如果您执行!$colors->isEmpty(),它会自动转换为boolean,这就是$colors会的,所以你必须使用第一个代码,而不是第二个。那么,你对第一个有什么问题?
  • @matiaslauriti 第一个问题是对象总是true
  • 一个解决方案是用户@lagbox 共享(最好的一个),另一个解决方案但真的不干净是这样做:$colors->isNotEmpty() ? $colors : false

标签: laravel eloquent laravel-query-builder


【解决方案1】:

如果您真的想在该集合中使用when 方法,您可以在$colors 变量中使用:

Product::when($colors->isNotEmpty(), function ($query) use ($colors) {
    ...
})...

【讨论】:

  • $colors->isNotEmpty() ? $colors : false 这个修复我的代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-15
  • 2021-07-23
  • 1970-01-01
  • 2021-10-27
  • 2021-01-10
  • 2023-04-02
相关资源
最近更新 更多