Laravel Eloquent多对多关联报Array to string conversion错误 无法查询用户投递职位
报错原因
报错直接诱因是你给Applies模型设置了数组类型的$primaryKey,Laravel原生要求模型主键为字符串类型的单字段,处理关联逻辑时调用mb_strpos处理主键参数时收到数组,就触发了该错误。同时你的多对多关联定义、业务逻辑匹配也存在错误,按以下步骤修复即可:
修复步骤
移除不必要的Applies中间表模型
多对多关联场景下不需要单独为中间表创建模型,直接删除Applies模型即可避免主键类型错误,如果确实需要保留中间表模型做其他业务,可以给applies表新增一个自增单字段主键id,再把Applies模型的$primaryKey修改为'id'即可消除报错。修正关联定义
你的需求是查询指定用户投递的所有职位,属于用户和职位的多对多关联,关联需要定义在用户模型(对应你user_info表的模型,假设为User,如果你的用户模型是Info则对应修改即可)中:
// 注意核对中间表外键名:你表结构中标注applies表用户外键为users_id,如果实际是user_id请同步修改第三个参数 public function appliedPosts() { return $this->belongsToMany(Post::class, 'applies', 'users_id', 'posts_id'); }
如果需要反向查询某个职位收到的所有投递用户,可以在Post模型中补充关联:
public function applicants() { return $this->belongsToMany(User::class, 'applies', 'posts_id', 'users_id'); }
- 控制器查询逻辑调整
public function index() { // 直接获取当前登录用户投递的所有职位 $appliedPosts = Auth::user()->appliedPosts; // 打印验证结果 dd($appliedPosts); }
内容的提问来源于stack exchange,提问作者Fatih Can
相关产品推荐
相关产品推荐

