如何创建laravel 5.1自定义模型事件?

时间:2016-04-04 14:49:49

标签: laravel laravel-5.1

我想在laravel 5.1中创建一个自定义模型事件。

对于e.x.更新文章类别时,我想制作一个活动并听取它。

$article = Article::find($id);
$article->category_id = $request->input('category_id');
// fire an event here

3 个答案:

答案 0 :(得分:1)

您应该使用Eloquent Events(不要与Laravel Events混淆)。

Intent emailIntent =
  new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto", "", null))
    .putExtra(Intent.EXTRA_SUBJECT, "blah")
    .putExtra(Intent.EXTRA_TEXT, emailBody);
startActivity(Intent.createChooser(emailIntent, "Send email..."));

答案 1 :(得分:0)

您可能希望调查Observers以使其更具可重用性和单一责任感,但起点可能相似:

public function boot()
{
    self::updated(function ($model) {
        if (array_key_exists('category_id', $model->getDirty())) {
            // Log things here
        }
    });
}

Laravel将填充一个“脏”的东西。包含已修改字段的数组。您可以使用此功能检测某个字段的更改时间。

您还有:

$model->getOriginal('field_name') // for this field value (originally)
$model->getOriginal() // for all original field values

答案 2 :(得分:0)

您可以使用 Attribute Events 在 category_id 属性更改时触发事件:

class Article extends Model
{
    protected $dispatchesEvents = [
        'category_id:*' => ArticleCategoryChanged::class,
    ];
}