Eloquent 模型事件应用
打赏作者

chenxin

原来看了一遍不明白!现在正在做项目练手,发现这个之前不懂的视频原来如此有用!

wl876645

回头再看一遍,受益匪浅。找到了昨天问题的答案。谢谢大神

UncleCaozy

不懂。。。希望看完其他的再过来看看就会懂了

JellyBool 回复 UncleCaozy

你用起来就懂了

Nixus

老师,这里会activities表中会有数据,主要是 laravel 在启动时,把函数名以boot开头的static方法都会产生这种效
果?
还有一点不理解的地方就是,static 为什么可以这样用static::函数 ?是因为这个后期静态绑定

JellyBool 回复 Nixus

因为 Eloquent 会自动找 函数名以boot开头的static方法

746019546

来回看了几遍,恨基础知识知道得太少,如果需要使用 updating, updated 这些,在trait里面怎么操作?
是不是写在

protected static function getModelEvents()
    {
        if(isset(static::$recordEvents)){
            return static::$recordEvents;
        }

        return ['created', 'updated'];
    }

那这个如何调用不同的方法呢

JellyBool 回复 746019546

直接在 Model 定义 :

public static $recordEvents = ['updating','updated'];
746019546 回复 JellyBool

添加了以后, updated在模型定义吗?

    public static function updated($model)
    {
        // TODO: Implement recordTest() method.
        dump($model);
    }

dump($model)的结果是

Closure {#213 ▼
  class: "App\Tag"
  parameters: {▶}
  file: "C:\laravel\NewCainiao\app\RecordTest.php"
  line: "17 to 19"
}

但还是不会用啊.不知道怎么更新其他的

JellyBool 回复 746019546

主要使用视频中定义的 trait 的文件

746019546 回复 JellyBool

知识浅薄,有待提升啊,能不能高抬贵手做一个created, updated 在同一个trait文件里面呢使用呢?

JellyBool 回复 746019546

类似这样:

class Discussion extends Model
{
    use RecordsActivity;
    protected static $recordEvents = ['created','updated'];
}

就好了。

746019546 回复 JellyBool

这样定义了之后, created 执行的也是 recordActivity 方法, updated 执行的也是 recordActivity 方法,
可能我描述问题有问题,我想 careated 执行 created 定义的. updated 执行 updated定义的,
实现 created, updated 执行不同的方法

JellyBool 回复 746019546

你在这里判断一下就好:

 protected static function bootRecordsActivity()
    {
        foreach (static::getModelEvents() as $event){
            static::$event(function($model) use ($event){
                // if $event === 'created'
                $model->recordActivity($event);
            });
        }
    }
f4cklangzi

还能这样注册事件啊,我在AppServicePrivder的boot方法里面写了几十行…这两种方法注册对性能有什么影响吗?

JellyBool 回复 f4cklangzi

感觉我还没遇上性能瓶颈的时候

Flourishing

暂时不理解的可以去看看trait的用法 还有static 这里是后期静态绑定的作用 然后弄懂多态关联 和理解这个RecordActivity trait里面的代码即可 对了 Eloquent 会自动找 函数名以boot开头的static方法

mzjmc

一头雾水 来回看一对一 一对多 能看明白 多对多怎么看都不明白