创建唯一随机数的laravel mutator不会运行

时间:2016-09-27 09:24:08

标签: php laravel

我有一个像这样的问题模型:

class Question extends Model
    {
        use SoftDeletes;

        protected $primaryKey = 'question_id';
        protected $dates      = ['deleted_at'];
        protected $fillable   = ['text', 'code', 'cat', 'answer', 'is_private', 'email', 'parent'];


        public function setCodeAttribute ($value)
        {
            \Debugbar::info('hello');

            do {
                $code      = rand(10000, 10000000);
                $user_code = User::where('code', $code)->get();

            } while (!$user_code->isEmpty());

            return $this->attributes['code'] = $code;
        }

    }

我想生成一个随机整数,并在创建模型的新实例时将其存储在code字段中。

为此,我写了一个改变器,你可以看到,但它甚至没有运行。

有什么问题?

1 个答案:

答案 0 :(得分:1)

好的mutator本身不会运行,直到你不打电话给$question->code = $someValue

您需要的是observer并在其中定义saving方法,该方法将提供code属性值的设置,如下所示:

    public function saving (Operation $operation)
    {
        \Debugbar::info('hello');

        do {
            $code      = rand(10000, 10000000);
            $user_code = User::where('code', $code)->get();

        } while (!$user_code->isEmpty());

        return $operation->code = $code;
    }

和corse你也需要从模型类中删除mutator。