繁体   English   中英

如何创建自定义集合function修改model数据?

[英]How to create a custom collection function to modify model data?

我有一个名为Presence的 model,它将用户的存在存储为重复事件,其中每一行都有startend日期、频率和间隔。 这样,我就可以使用RRule从单个数据库行创建事件。

现在,当我获取Presence::all()之类的数据时,我想添加一个->toRrule() (如->toArray() ),以便将最终数据修改为单个事件的列表。

例如:

+----+------------+------------+----------+-----------+
| id |   start    |    end     | interval | frequency |
+----+------------+------------+----------+-----------+
|  1 | 2022-10-01 | 2022-10-03 |        1 | DAILY     |
+----+------------+------------+----------+-----------+

我会用Presence::first()得到这一行,我想用Presence::all()->toRrule()得到以下内容:

[
   [
      'start' => '2022-10-01'
      'end' => '2022-10-01'
   ],
   [
      'start' => '2022-10-02'
      'end' => '2022-10-02'
   ],
   [
      'start' => '2022-10-03'
      'end' => '2022-10-03'
   ],
]

不管 function 实际做什么,a) 这是一种优雅的方式吗? b) 如何创建这个 function,特别是在哪里创建?

我真的不知道这是否是一种优雅的方式,因为您没有指定 function 的作用。

您应该将此 function 添加到您的 Model 文件中。 现在对于Presence model,您应该前往文件app/models/Presence.php ,然后以这种方式添加 function:

public static function toRrule() {
...
}

现在如果你想访问Presence model 上的 function,你只需这样做Presence::all()->toRrule()

无需进入优化解决方案设计的路径。 Laravel 提供了一种为您的 Presence model 自定义集合的方法,您可以在其中定义您的 toRule() function。它将完全符合您正在搜索的方式。 在这里找到官方文档https://laravel.com/docs/9.x/eloquent-collections#custom-collections

祝你好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM