有没有一种方法可以在存储Laravel模型之前对其进行操作?

时间:2020-05-06 01:20:27

标签: php laravel model

在Laravel中,我已经在许多控制器中使用了模型的创建方法,

现在,我需要对所有这些控制器中的特定输入执行strip_tags($comment),然后才能使用create()这样的方法将其插入数据库:

Comment:create([
    'comment' => $comment,
    ...
]);

我应该在所有控制器中重复执行此操作吗?

$comment = strip_tags($comment); // < Is it possible to do this on model's file so we don't repeat it every time? 

Comment:create([
    'comment' => $comment,
    ...
]);

或者这可以在模型中实现?

2 个答案:

答案 0 :(得分:1)

在保存之前,您可以使用model events进行检查和安排。

在模型类中添加以下方法;

protected static function boot()
{
    parent::boot();
    self::saving(function ($model) {
        $model->comment = strip_tags($model->comment);
        // do your pre-checks or operations.
    });
}

这里有useful post可供阅读

答案 1 :(得分:0)

有一种直接在模型中进行操作的方法,称为Mutators。如果您的列名是评论,那么mutator函数将被称为 setCommentAttribute

public function setCommentAttribute($comment)
{
    $this->attributes['comment'] = strip_tags($comment);
}

在此模型用于保存/更新的任何地方,评论数据将通过 set ... 函数进行。