Laravel 连接具有中间关系的表

Posted

技术标签:

【中文标题】Laravel 连接具有中间关系的表【英文标题】:Laravel Join Tables with intermediate relations 【发布时间】:2021-02-28 20:56:38 【问题描述】:

我有 3 张桌子。1) Recent Views 2) posts3) users。我需要用中间关系加入这三个表。

recent table
------------
id
post_id
user_id
date
posts table
-----------
id
user_id
post_title
description
date
users table
-----------
id
username
image
email
date

现在需要获取来自recent table 的所有数据,其中user_id = logged_users_id -> 将posts tablerecent.post_id = posts.id 连接在一起-> 将“用户表”与posts.user_id = users.id 连接起来。我怎么能用 laravel eloquent 做到这一点?有人可以帮我解决这个问题吗?

我使用的代码是:

$contents = RecentView::where('user_id', $loggedUser)
                ->with('posts')
                ->with('user')
                ->paginate(12)
                ->toArray();

但它使用recent.user_id = users.id 加入用户表

【问题讨论】:

你写的代码现在可以用了吗?还是您正在寻找更好的解决方案? 没有。我得到的结果是错误的。从用户表中获取的是每个帖子的记录用户详细信息,而不是帖子所有者详细信息 如果我像 laravel 的新手一样做错任何事情,也可以提供更好的解决方案建议 测试我发送的样本 试过了。但出现错误 【参考方案1】:
$contents = RecentView::where('recent_views.user_id', $loggedUser)
->leftJoin('feed_posts','recent_views.post_id','=','feed_posts.id')
->leftJoin('users','feed_posts.user_id','=','users.id')
->paginate(12)->toArray();

只需检查表名和其余部分

【讨论】:

``` SQLSTATE[23000]:违反完整性约束:1052 where 子句中的“user_id”列不明确(SQL:从recent_views 内部连接feed_posts 中选择计数(*)作为聚合recent_views.post_id = feed_posts.id 内连接usersfeed_posts.user_id = users.id 其中user_id = 235) 你的表名是 feed_posts 吗? 您发送表和列的确切名称。 是的。表是“recent_views”、“feed_posts”和“users” recent_views ----------------- id user_id post_id -----------------

以上是关于Laravel 连接具有中间关系的表的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中填充具有多对多关系的表

Laravel 连接 3 个表

Laravel - 雄辩的关系 - 多对多 - 获取中间表列

Laravel:多种用户类型的表结构,多态关系

更新中间表Laravel关系

加入的 Laravel 查询生成器计数