Laravel 一对多关系与 2 个主键
Posted
技术标签:
【中文标题】Laravel 一对多关系与 2 个主键【英文标题】:Laravel One to Many relation with 2 primary keys 【发布时间】:2020-01-31 03:13:25 【问题描述】:我有两张桌子
-
用户表
id
name
...
-
聊天表
id
from_id // fk - id on users, the user sent the message
to_id // fk - id on users, intended user
message_body
现在,我正在尝试建立一对多关系,其中用户有很多聊天消息,但聊天消息有两个用户。 来自和到用户
如何定义这种关系?我必须用户急切加载。
我尝试使用Compoships,但没有成功。 我的代码
用户模型
public function chats()
return $this->hasMany(Chat::class, ['from_id', 'to_id'], 'id');
聊天模型
public function user()
return $this->belongsTo(User::class, ['from_id', 'to_id'], 'id');
【问题讨论】:
【参考方案1】:public function chats()
return $this->hasMany(Chat::class, 'from_id', 'id') + $this->hasMany(Chat::class,'to_id','id');
public function userFrom()
return $this->belongsTo(User::class, 'from_id', 'id');
public function userTo()
return $this->belongsTo(User::class, 'to_id', 'id');
【讨论】:
请尝试通过几个字符让其他人了解你做了什么以及它是如何工作的【参考方案2】:你为什么不这样做呢?
在您的用户模型上,像这样设置两个关系:
public function chatsFrom()
return $this->hasMany('App\Chat', 'from_id');
public function chatsTo()
return $this->hasMany('App\Chat', 'to_id');
然后,在您的 Chat 模型上,还设置两个关系,一个到 from
,另一个到 to
,两者都引用一个 User 模型。像这样:
public function fromUser()
return $this->belongsTo('App\User', 'from_id');
public function toUser()
return $this->belongsTo('App\User', 'to_id');
这样,您可以使用以下方式访问关系:
$user->chatsFrom();
$user->chatsTo();
$chat->fromUser();
$chat->toUser();
【讨论】:
我想过,但我想做$user->chats()->delete();
this之类的事情。
@APu 但如果您在一次聊天中在from
和to
上有不同的用户,您就不能这样做。除非您愿意删除具有不同用户的帖子。以上是关于Laravel 一对多关系与 2 个主键的主要内容,如果未能解决你的问题,请参考以下文章