在 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.pd
f' 或 '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
# 重构
# 的是
# 多个
# 但在
# 你想
# 每页
# 第二个
# 分页
# 再用
# 报错
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
Win11怎么关闭搜索历史 Win11清除搜索框最近记录【隐私】
Win11如何更改用户账户文件夹名称 Win11修改C:Users用户名【终极教程】
如何使用 Python 合并文件夹内多个 Excel 文件并避免权限错误
Win11鼠标灵敏度怎么调 Win11鼠标指针移动速度设置【教程】
Win11怎么设置默认邮件应用_Windows11应用关联Mail设置
Windows 11怎么更改锁屏超时时间_Windows 11电源选项中设置屏幕关闭时间
LINUX怎么设置系统语言_LINUX修改中文环境
Mac如何备份到iCloud_Mac桌面与文稿文件夹云同步【设置】
Python字符串操作教程_切片拼接与格式化详解
Windows电脑如何截屏?(四种快捷方法)
如何使用Golang实现容器自动化运维_Golang Docker运维管理方法
Mac怎么安装软件_Mac安装dmg与pkg文件的区别【指南】
Win10如何卸载微软拼音输入法 Win10只保留一个输入法【教程】
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
php删除数据怎么清空表_truncate与delete区别及用法【汇总】
如何在 Go 中调用动态链接库(.so)中的函数
Win11讲述人怎么关闭_Win11误触开启语音朗读关闭【快捷键】
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
windows如何测试网速_windows系统网络速度测试方法
Mac怎么查看活动监视器_理解Mac进程和资源占用【指南】
Windows笔记本无法进入睡眠模式怎么办?(电源疑难解答)
c++中的可变参数模板(variadic templates)怎么用_c++模板编程黑魔法【C++11】
Win11怎么关闭开机声音_Win11系统启动提示音静音【教程】
Windows10如何更改桌面背景_Win10个性化幻灯片放映设置
c++如何实现多态性_c++ 虚函数表原理与动态绑定机制【教程】
Python 模块的 __name__ 属性如何由导入方式决定?
Win11怎么设置单手模式_Win11触控键盘布局调整教程【技巧】
如何使用Golang指针与结构体结合_修改结构体内部字段
Win10路由器怎么隐藏ssid Win10隐藏wifi名称设置【指南】
Win10怎样设置闹钟贪睡时间 Win10闹钟贪睡时长设置【步骤】
如何在Golang中实现自定义Benchmark_Golang testing.B自定义性能测量示例
windows如何禁用驱动程序强制签名_windows高级启动设置指南
mac怎么安装pip_MAC Python pip安装工具与升级方法【详解】
c++怎么调用nana库开发GUI_c++ 现代风格窗口组件与事件处理【实战】
如何在 Go 开发中正确处理本地包导入与远程模块路径的一致性问题
如何在包含多值的列中精准搜索指定演员?
Windows10无法识别USB设备描述符请求失败_通用串行总线控制器修复
Win11无法安装软件怎么办_Win11解除应用安装限制设置【修复】
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
如何解决同一段404代码在不同主机上表现不一致的问题
PHP主流架构怎么部署到Docker_容器化流程【操作】
c++ unordered_map怎么用 c++哈希表用法【教程】
Mac如何彻底清理浏览器缓存?(Safari与Chrome)
windows如何修改文件默认打开方式_windows设置程序关联教程
如何在 Django 中安全修改用户密码而不使会话失效
Win11怎么设置默认视频播放器_Windows 11关联媒体文件打开方式【步骤】
Win11怎么更改电脑名称_Windows 11修改计算机名操作指南【步骤】
Windows10系统怎么查看系统版本_Win10运行winver命令查询
php做exe支持多线程吗_并发处理实现方式【详解】
php串口通信波特率怎么选_根据硬件手册设置正确波特率【方法】
2025-12-26
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。