Laravel复合主键Eloquent关联问题:获取用户收藏的Escort
解决多对多关联查询问题
你的场景是用户与Escort的多对多收藏关系,使用hasMany是错误的——hasMany对应一对多关联,而你需要的是多对多关联,应该用belongsToMany方法来定义,无需额外扩展包。
步骤1:修正User模型的关联方法
替换User.php里的hasMany代码,改成如下多对多关联定义:
public function favoriteEscorts() { return $this->belongsToMany(Escort::class, 'favorites', 'user_id', 'escort_id') ->withTimestamps(); // 若favorites表有时间戳字段可添加 }
参数说明:
- 第二个参数是中间表名
favorites - 第三个参数是当前模型(User)在中间表的外键
user_id - 第四个参数是关联模型(Escort)在中间表的外键
escort_id
步骤2:在Tinker中测试查询
现在可以通过两种方式获取收藏数据:
// 直接访问属性,自动执行查询并返回Escort集合 $user = User::find(1); $user->favoriteEscorts; // 或显式调用get()方法 $user->favoriteEscorts()->get();
补充:中间表的常用操作
基于这个关联定义,还可以直接完成收藏的增删操作:
// 添加收藏 $user->favoriteEscorts()->attach($escortId); // 移除收藏 $user->favoriteEscorts()->detach($escortId); // 切换收藏状态(存在则移除,不存在则添加) $user->favoriteEscorts()->toggle($escortId);
内容的提问来源于stack exchange,提问作者tetthys
相关产品推荐
相关产品推荐

