gpt4 book ai didi

php - 如何在 Laravel 中实现模型修订?

转载 作者:可可西里 更新时间:2023-11-01 07:14:59 24 4
gpt4 key购买 nike

这个问题是针对我用 PHP 编写的 pastebin 应用程序的。

我进行了一些研究,但未能找到满足我需求的解决方案。我有一个具有这种结构的表:

+-----------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+----------------+
| id | int(12) unsigned | NO | PRI | NULL | auto_increment |
| author | varchar(50) | YES | | | |
| authorid | int(12) unsigned | YES | | NULL | |
| project | varchar(50) | YES | | | |
| timestamp | int(11) unsigned | NO | | NULL | |
| expire | int(11) unsigned | NO | | NULL | |
| title | varchar(25) | YES | | | |
| data | longtext | NO | | NULL | |
| language | varchar(50) | NO | | php | |
| password | varchar(60) | NO | | NULL | |
| salt | varchar(5) | NO | | NULL | |
| private | tinyint(1) | NO | | 0 | |
| hash | varchar(12) | NO | | NULL | |
| ip | varchar(50) | NO | | NULL | |
| urlkey | varchar(8) | YES | MUL | | |
| hits | int(11) | NO | | 0 | |
+-----------+------------------+------+-----+---------+----------------+

这是一个 pastebin 应用程序。我基本上想要粘贴修订,这样如果你打开粘贴 #1234,它会显示该粘贴的所有过去修订。

我想到了三种方式:

方法一

有一个包含 id 和 old_id 之类的修订表,对于每个 ID,我会插入所有旧修订,所以如果我的结构如下所示:

rev3: 1234
rev2: 1233
rev1: 1232

该表将包含以下数据:

+-------+----------+
| id | old_id |
+-------+----------+
| 1234 | 1233 |
| 1234 | 1232 |
| 1233 | 1232 |
+-------+----------+

我遇到的问题是它引入了大量重复数据。修订越多,它不仅有更多的数据,而且我需要为修订表中的每个新粘贴执行 N 次插入,这对于大 N 来说不是很好。

方法二

我可以在顶部的粘贴表中添加一个 child_id,然后更新它。然后,在获取粘贴时,我将继续为每个 child_id 和他们的 child_id 等查询数据库......但问题是,每次打开具有许多修订的粘贴时,这将引入太多的 DB 读取。

方法三

同样涉及到一个单独的revisions表,但是对于和方法一相同的场景,它会这样存储数据:

+-------+-----------------+
| id | old_id |
+-------+-----------------+
| 1234 | 1233,1232 |
| 1233 | 1232 |
+-------+-----------------+

当有人打开粘贴 1234 时,我将使用 IN 子句获取那里的所有子粘贴数据。

哪种方法最好?或者有更好的方法吗?我正在使用具有 Eloquent ORM 的 Laravel 4 框架。

编辑:我可以用 oneToMany 关系执行方法 1 吗?我知道我可以使用 Eager Loading获取所有修订,但我如何才能插入它们而不必进行肮脏的修改?

编辑:我想出了如何处理上述问题。我将添加一个答案来结束这个问题。

最佳答案

如果你使用的是 Laravel 4,请输入 Revisionable一试。这可能适合您的需求

关于php - 如何在 Laravel 中实现模型修订?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18502697/

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