【发布时间】:2021-04-03 00:27:16
【问题描述】:
我有 2 个模型,User 和 Conversation 相互关联,具有多对多关系,多用户多会话。
在我的模型上,我有:
User:
public function conversation() {
return $this->belongsToMany('App\Models\Conversation');
}
Conversation:
public function users() {
return $this->belongsToMany('App\Models\User');
}
所以我可以通过$user->conversation; 获取用户的对话,反之亦然,通过$conversation->users 检索用户的对话,就像一个魅力。问题是我想要一种方法来检索某个用户之前联系过的所有用户,简而言之,类似于:
$user = User::find(1);
$talkedUsers = $user->conversation->user.
还有一种方法可以检查用户“x”与用户“y”进行的所有对话(“如果有”)
$userX = User::find(1);
$userY = 2;
$talkedUser = $userX->conversation->where('user.id', '=', $userY);
显然,上面的代码行不通。我想知道这样的事情是否可以在不添加复杂的原始查询的情况下完成,我希望只使用QueryBuilder。
【问题讨论】:
-
你试过这个吗:laravel.com/docs/8.x/eloquent-relationships#has-many-through 路线问题的标题具有误导性。您似乎要求分层递归结构,但您的问题更基本。
标签: php mysql laravel eloquent