laravel 查询数组请求时

Posted

技术标签:

【中文标题】laravel 查询数组请求时【英文标题】:laravel when query with array requests 【发布时间】: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 【参考方案1】:

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

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

【讨论】:

$colors->isNotEmpty() ? $colors : false 这个修复我的代码

以上是关于laravel 查询数组请求时的主要内容,如果未能解决你的问题,请参考以下文章

向 Laravel Api 发出 POST 请求时,React Native 获取一个空数组

Laravel 获取正文请求并避免查询字符串参数

在 Laravel get() 查询构建器中附加两个数组

Laravel 5查询生成器记录集数组

在 Laravel 中查看刀片时检查有多少查询发送到数据库

验证数组中的 Laravel 嵌套规则