Laravel只获得当前版本的型号

问题描述 投票:1回答:1

我在Laravel Framework中实现了自定义模型版本控制。在数据库表中有几列处理它:sibling_id(将模型的不同版本链接在一起),versionacceptedvalidFrom

例如:

| 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 |     |

我对当前型号的意思是:

  • 在公认的有效模态中具有最大版本号的模型
  • 如果没有任何其他版本,则为版本1

我想有一些方法可以正常获得由sibling_id分组的当前模型(因此在此示例中,集合应包括模型1,3和5)。这应该与Laravel的withTrashed()函数一样工作,这样我就可以包含所有内容(例如版本历史记录)。

也许这可以用范围以某种方式完成,但我觉得它很复杂,因为“兄弟分组”和另一个复杂的过滤器,所以我最终在这里问。

提前致谢。

php sql laravel laravel-5 laravel-5.5
1个回答
0
投票

我认为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中为该视图绘制另一个雄辩的模型。这样,您可以从表中选择是否要获取全部,或者从视图中选择是否需要“唯一”记录。

© www.soinside.com 2019 - 2024. All rights reserved.