【问题标题】:Laravel Join Tables with intermediate relationsLaravel 连接具有中间关系的表
【发布时间】: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 的新手一样做错任何事情,也可以提供更好的解决方案建议
  • 测试我发送的样本
  • 试过了。但出现错误

标签: laravel eloquent laravel-query-builder eloquent-relationship


【解决方案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 -----------------
猜你喜欢
  • 1970-01-01
  • 2021-01-05
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
  • 2019-05-08
  • 2016-02-21
  • 2021-07-23
相关资源
最近更新 更多