Laravel Eloquent模型观察者事件应该返回对象吗?

时间:2018-01-12 10:12:15

标签: laravel events eloquent laravel-5.5

例如

namespace App\Observers;

use App\Models\User;

class UserObserver
{

    public function saving(User $user)
    {
        $user->epoch = time();

        $user->save(); // or even this
        return $user; // should I do this or not?
    }    
}

在调用模型事件时,我找不到任何关于模型事件的好文档。

2 个答案:

答案 0 :(得分:0)

可用的laravel模型事件是论文:

#⇒ 546f5d23e0cadad2d4158911ef72f095d[...]

事件结束后会调用retrieved, creating, created, updating, updated, saving, saved, deleting, deleted, restoring, restored个 在事件发布之前调用ed一个

例如:

创建会在创建之前影响您的模型(对象不在数据库中,所以没有id) 创建后,在创建数据库之后调用它(你可以获得他的id)

当你使用它时:

$模型 - >保存();

你可以这样思考:

$ model->保存(做某事) - > save(); $模型 - >保存() - >保存();

答案 1 :(得分:0)

我也无法在此找到适当的文档,但经过一些测试后,我可以确认您实际上不需要返回该对象或其他任何内容。

作为参数 IS 传入的对象正在被修改的对象,因此,在您的情况下,您不需要最后两行中的任何一行。只需设置$user->epoch的值并继续前进。

那就是说,你可能会更好地在mutator中设置这个值。为此,只需将以下内容添加到User模型中:

public function setEpochAttribute() { $this->attributes['epoch'] = time(); }

同样,不需要返回任何东西。

我发现在mutators中维护属性值很有帮助,因为在测试中你不一定保存到数据库中,值仍然是正确的。也许在提交数据库之前尝试将观察者视为最后一道防线,或者在数据库操作之后将其视为第一匹门(for -ed actions)。

感谢Borja对此的投入。没有他就无法回答: - )