【问题标题】:Laravel get only models with current versionLaravel 只获取当前版本的模型
【发布时间】:2018-06-10 02:06:36
【问题描述】:

我已经在 Laravel 框架中实现了自定义模型版本控制。数据库表中有几列处理它: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】:

    我认为使用 SQL 视图会更容易使用,而不是使用 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 中的视图映射另一个 eloquent 模型。这样,如果您想获取所有记录,您可以从表中选择,或者如果您想要“唯一”记录,则可以从视图中选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-17
      • 2014-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多