【问题标题】:How to group list of datas?如何对数据列表进行分组?
【发布时间】:2021-02-11 14:02:41
【问题描述】:

我有三个表,第一个是 posts 表,第二个是 post_users 表和 users。

post_users 表包含帖子的标记用户。它有post_id 和user_id 列。

下面是我的工作代码:

DB::table('posts')
->select(
    'posts.id AS post_id',
    'posts.likes AS post_likes',
    'post_user.user_id AS tagged_users'
)
->join('post_user', 'post_user.post_id', 'posts.id')
->orderBy('posts.created_at', 'DESC')
->get();

左边是上面代码的结果,我只想问如何达到想要的结果?我也会很感激雄辩的答案。

【问题讨论】:

  • > 'post_user.user_id AS tagged_users' 直接从没有聚合的连接表中选择一个 ID 会导致基于该连接匹配的重复。我将使用 2 个单独的简单快速查询来实现。第一个,但只是从枢轴和第二个聚合用户 ID,以获取所有用户,所有用户在第一个收集的用户 ID。之后,您只需对帖子进行 1 次循环,即可根据第二次的结果映射用户。
  • @Svetoslav 所以不可能在一个查询中实现这一点。先生,您能在下面分享您建议的答案代码吗?如果有帮助,我可以接受。
  • 为什么不用雄辩的关系,可以用with()的方法。
  • @No.The.Hi 先生,您能告诉我如何以 Eloquent 的方式进行操作吗?这也是我切换到查询生成器的原因。

标签: laravel eloquent laravel-query-builder


【解决方案1】:

使用laravel-eloquent的方法如下:

首先,在他们的模型中设置post和tag之间的关系,当然,这与 您的数据库分析:

  1. 如果您的关系是一对多:
// Post Model
public function tags()
{
    return $this->hasMany('App\Models\Tag');
}
// Tag Model
public function posts()
{
    return $this->hasMany('App\Models\Post');
}

  1. 或者你们的关系是多对多的:
// Post Model
public function tags()
{
    return $this->belongsToMany('App\Models\Tag');
}
// Tag Model
public function posts()
{
    return $this->belongsToMany('App\Models\Post');
}

最后,当你想获得带有自我标签的帖子时,你只需这样做:

Post::with('tags')->get();

试试这个方法!

更多信息请阅读docs。

【讨论】:

    猜你喜欢
    • 2015-04-07
    • 2015-05-15
    • 2015-09-18
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    相关资源
    最近更新 更多