我有一个像这样的问题模型:
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
字段中。
为此,我写了一个改变器,你可以看到,但它甚至没有运行。
有什么问题?
答案 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。