You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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关联关系(更优雅)

既然是多对多关联,建议直接在模型中定义关联关系,简化查询流程:

  1. 在Role模型中添加关联方法:
public function files()
{
    // 第二个参数指定中间表名file_role
    return $this->belongsToMany(File::class, 'file_role');
}
  1. 直接通过角色获取关联文件:
// 先找到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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 18:10:36