在 laravel 中,`wherein()` 要求第二个参数必须是数组,而 `request('filename')` 返回的是字符串,直接传入会导致类型错误;应改用 `where()` 进行精确匹配,或对输入做数组转换后再使用 `wherein()`。
你遇到的错误:
Argument 1 passed to Illuminate\Database\Query\Builder::cleanBindings() must be of the type array, string given
根本原因在于这一行代码:
$media = $media->whereIn('med_name', request('fileName'));whereIn('column', $array) 是为「列值是否存在于指定数组中」设计的,例如查找 med_name 为 'report.pdf' 或 'logo.png' 等多个可能值之一的记录。但 request('fileName')(来自 )返回的是一个字符串(如 "invoice"),而非数组 —— 因此 Laravel 底层校验失败,抛出类型异常。
✅ 正确做法取决于你的业务需求:
用户在搜索框输入 invoice,你想查 med_name = 'invoice' 的记录:
if (request()->has('fileName') && trim(request('fileName')) !== '') {
$media = $media->where('med_name', request('fileName'));
}? 提示:使用 trim() 替代 != "" 更健壮,避免空格干扰。
用户输入 invo,应匹配 invoice.pdf、invo_2025.xlsx 等:
if (request()->has('fileName') && trim(request('fileName')) !== '') {
$search = '%' . trim(request('fileName')) . '%';
$media = $media->where('med_name', 'like', $search);
}若真需 whereIn(如多选文件名),则前端 应改为数组形式(如 name="fileName[]"),并确保后端接收为数组:
后端校验并安全使用:
$names = request('fileName', []);
if (is_array($names) && !empty($names)) {
$media = $media->whereIn('med_name', $names);
}当前代码存在两个潜在问题:
✅ 推荐重构内层查询为关联预加载(若模型已定义关系),或使用 groupBy + with() 一次性获取同组所有尺寸:
// 示例:按 med_group 分组聚合路径(需数据库支持 JSON_AGG 或 GROUP_CONCAT)
$mediaWithPaths = MediaLibrary::selectRaw('*, JSON_OBJECTAGG(med_dimension, med_path) as path_map')
->where('med_dimension', 'full')
->when(request('fileName'), fn($q) => $q->where('med_name', request('fileName')))
->when(request('mediaType'), fn($q) => $q->whereIn('med_extension', (array) request('mediaType')))
->groupBy('med_group')
->latest()
->paginate(15);但更简单稳妥的方式是:先获取分页后的 full 记录,再用一次查询批量获取所有相关尺寸路径,然后在 PHP 层关联组装 —— 平衡可读性与性能。
| 用法 | 适用场景 | 参数类型 | 示例 |
|---|---|---|---|
| where('col', $value) | 单值精确匹配 | string / int | where('med_name', 'report.pdf') |
| where('col', 'like', $pattern) | 模糊匹配(推荐搜索) | string | where('med_name', 'like', '%report%') |
| whereIn('col', $array) | 多值精确匹配 | array | whereIn('med_name', ['a.pdf','b.jpg']) |
立即修复方案(对应你当前表单):
将 select() 方法中的错误行:
$media = $media->whereIn('med_name', request('fileName'));替换为:
if (request()->has('fileName') && trim(request('fileName')) !== '') {
$media = $media->where('med_name', 'like', '%' . trim(request('fileName')) . '%');
}这样既解决报错,又提升用户体验 —— 用户无需输入完整文件名即可检索。
# php
# laravel
# js
# 前端
# json
# go
# 后端
# pdf
# String
# Array
# Object
# foreach
# select
# 字符串
# column
# input
# 重构
# 的是
# 多个
# 但在
# 你想
# 每页
# 第二个
# 分页
# 再用
# 报错
相关文章:
南平网站制作公司,2025年南平市事业单位报名时间?
大同网页,大同瑞慈医院官网?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
如何自定义建站之星模板颜色并下载新样式?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
建站之星CMS五站合一模板配置与SEO优化指南
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
如何通过山东自助建站平台快速注册域名?
湖州网站制作公司有哪些,浙江中蓝新能源公司官网?
seo网站制作优化,网站SEO优化步骤有哪些?
建站之星IIS配置教程:代码生成技巧与站点搭建指南
建站之星客服服务时间及联系方式如何?
如何选择网络建站服务器?高效建站必看指南
,网站推广常用方法?
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
建站之星安装后界面空白如何解决?
广德云建站网站建设方案与建站流程优化指南
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
如何通过免费商城建站系统源码自定义网站主题与功能?
建站之星上传入口如何快速找到?
沈阳制作网站公司排名,沈阳装饰协会官方网站?
建站之星图片链接生成指南:自助建站与智能设计教程
如何选择高效便捷的WAP商城建站系统?
中山网站制作网页,中山新生登记系统登记流程?
代购小票制作网站有哪些,购物小票的简要说明?
如何在宝塔面板中修改默认建站目录?
建站之星后台密码如何安全设置与找回?
公司网站设计制作厂家,怎么创建自己的一个网站?
jQuery 常见小例汇总
建站之星收费标准详解:套餐费用及年费价格表一览
定制建站如何定义?其核心优势是什么?
建站之星各版本价格是多少?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
如何在建站宝盒中设置产品搜索功能?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
建站主机选购指南:核心配置优化与品牌推荐方案
如何设置并定期更换建站之星安全管理员密码?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
制作公司内部网站有哪些,内网如何建网站?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
5种Android数据存储方式汇总
大连 网站制作,大连天途有线官网?
建站主机选购指南:核心配置与性价比推荐解析
网站制作公司,橙子建站是合法的吗?
移民网站制作流程,怎么看加拿大移民官网?
如何在云指建站中生成FTP站点?
如何彻底卸载建站之星软件?
如何通过建站之星自助学习解决操作问题?
建站上传速度慢?如何优化加速网站加载效率?
公众号网站制作网页,微信公众号怎么制作?
*请认真填写需求信息,我们会在24小时内与您取得联系。