【发布时间】:2021-03-22 21:47:18
【问题描述】:
我有一个 File 模型,它表示存储在磁盘上的文件。
磁盘上的文件充当缓存,当文件被请求时,如果文件存在则从磁盘提供,否则动态生成。
这些文件属于使用多态关系的其他模型(例如,一个项目可以有多个文件)。
如果它们的父模型在生成后已更新,则文件将变得陈旧并且必须重新生成。
我正在使用范围来检索与模型相关的文件,这些文件仍然是最新的(不是陈旧的)。
public function scopeCurrent($query, Model $compareWith)
{
$query->where('updated_at', '>', $compareWith->updated_at);
}
我可以按如下方式获取模型的当前记录:
$model->files()->current($model)->get()
这很好用,但是必须将父模型传递给作用域才能使用它似乎很麻烦。但是,scope 方法在 File 模型的已启动实例上运行,因此它无法直接访问它。 (在 scope 函数中,$this 是一个空的 File 模型,没有 ID、属性或关系)。
我花了一些时间浏览文档,但我不知道如何使它工作。
我觉得这篇文章可能是关键,但老实说,我很难理解它。
https://nullthoughts.com/development/2019/10/08/dynamic-scope-on-latest-relationship-in-laravel/
【问题讨论】:
标签: laravel eloquent eloquent-relationship