gpt4 book ai didi

php - 事件提要的 Laravel Eloquent Combine 查询

转载 作者:行者123 更新时间:2023-11-29 02:13:01 24 4
gpt4 key购买 nike

你好,我在 Laravel 中有一个应用程序,其中大量用户数据存储在跨多个模型的单独表中。我现在需要创建一个事件提要,这意味着按日期对表格中的各种数据进行排序。

为了便于说明,假设我有两个模型,CommentLike

我想要一个按日期组合两者的提要。 merge() 不是一个选项,因为它们可能具有相同的 id

因此我可以UNION 它们,但我的问题是我不知道什么来自什么。

我喜欢的表是这样的:

+------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| user_id | int(11) | NO | | NULL | |
| asset_id | int(11) | NO | | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
+------------+------------------+------+-----+---------+----------------+

我的评论表是这样的:

+------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| asset_id | int(11) | NO | | NULL | |
| content | longtext | NO | | NULL | |
| user_id | int(11) | NO | | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
+------------+------------------+------+-----+---------+----------------+

我的问题是,如果我只是合并这两个查询,我只会根据 content 列的存在知道它们是不同的,这可能在另一个模型中,例如 Blurb 或其他。

基本上,我如何跨模型获得多个查询,同时明确哪些属于哪里,因为在我的事件提要中我想说,10 分钟前你发表评论,5 分钟前你喜欢,等等。

我不想因为效率低下而进行多次查询,我也不想将所有事件(喜欢和评论等)存储在一个表中。是否有某种别名我可以使用而不是重命名列我使用查询插入数据用于查询目的,例如评论选择会在临时字段中添加“评论”以便我可以访问它

$数据->类型?我可以在所有表​​中放置一个类型,但这样我就会不必要地占用空间,因为显然我知道评论是评论,如果它在评论表中,这是我唯一的查询,但现在我正在重新考虑我的给定的结构我需要一个查询来跨越多个表。

最佳答案

您可以使用以下代码获取用户事件提要。

$userId = Auth::id(); //or whatever you want.
$activity = DB::table('comment as ac')
->select(DB::raw('ac.user_id , ac.asset_id , ac.comment , ac.created_at , ac.updated_at , "comment" as activity_type'))
->where("ac.user_id", $userId)
->union(
DB::table('like as al')
->select(DB::raw('al.user_id , al.asset_id , NULL as comment , al.created_at , al.updated_at , "like" as activity_type'))
->where("al.user_id", $userId)
)
->latest()
->get();

关于php - 事件提要的 Laravel Eloquent Combine 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46759853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com