[英]How to create a custom collection function to modify model data?
我有一个名为Presence
的 model,它将用户的存在存储为重复事件,其中每一行都有start
和end
日期、频率和间隔。 这样,我就可以使用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.