SQLSTATE[HY093]错误:Laravel查询中如何获取数字file_id而非关联数组
解决方法
方法一:提取纯数字ID数组
你当前用get('file_id')得到的是包含关联数组的集合,正确做法是用pluck()方法直接提取file_id字段的纯数字数组:
// 提取对应role_id的所有file_id,转为纯数字数组 $file_ids = File_Role::where('role_id', $id)->pluck('file_id')->toArray(); // 用whereIn查询所有匹配的文件 $files = File::whereIn('id', $file_ids)->get();
方法二:利用Laravel关联关系(更优雅)
既然是多对多关联,建议直接在模型中定义关联关系,简化查询流程:
- 在
Role模型中添加关联方法:
public function files() { // 第二个参数指定中间表名file_role return $this->belongsToMany(File::class, 'file_role'); }
- 直接通过角色获取关联文件:
// 先找到dealer角色 $dealerRole = Role::where('name', 'dealer')->first(); // 获取该角色对应的所有文件 $files = $dealerRole->files;
原代码报错原因
你用get('file_id')返回的是Collection集合,每个元素是['file_id' => 1]这样的关联数组,直接把这个集合传入where('id', '=', $file_role)会导致SQL解析错误,生成where id = {"file_id":1}这种无效语句,因此必须先提取出纯数字的ID列表。
内容的提问来源于stack exchange,提问作者Delano van londen
相关产品推荐
相关产品推荐

