我在Laravel Framework中实现了自定义模型版本控制。在数据库表中有几列处理它:sibling_id
(将模型的不同版本链接在一起),version
,accepted
和validFrom
。
例如:
| id | sibling_id | version | accepted | validFrom | ... |
|----|------------|---------|----------|------------|-----|
| 1 | 1 | 1 | 1 | 2017-12-01 | |
| 2 | 1 | 2 | 1 | 2018-06-01 | |
| 3 | 2 | 1 | 1 | 2017-12-10 | |
| 4 | 2 | 2 | 0 | 2017-12-28 | |
| 5 | 3 | 1 | 0 | 2017-12-01 | |
我对当前型号的意思是:
我想有一些方法可以正常获得由sibling_id
分组的当前模型(因此在此示例中,集合应包括模型1,3和5)。这应该与Laravel的withTrashed()
函数一样工作,这样我就可以包含所有内容(例如版本历史记录)。
也许这可以用范围以某种方式完成,但我觉得它很复杂,因为“兄弟分组”和另一个复杂的过滤器,所以我最终在这里问。
提前致谢。
我认为SQL View更容易使用,而不是使用Laravel构建查询。
我将构建一个实现查询的视图:
select t.* from table as t
join (select sibling_id, MAX(version) as version from table group by sibling_id) as grouped
on grouped.sibling_id = t.sibling_id and t.version = grouped.version;
然后在Laravel中为该视图绘制另一个雄辩的模型。这样,您可以从表中选择是否要获取全部,或者从视图中选择是否需要“唯一”记录。