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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:45:35