我有这样的模型,我想在SetFooAttribute中获取一个属性。但是所有时间$ this-> getAttribute(' id')都是空的!有没有办法访问id?
class MyModel extends Model
{
public static function boot()
{
parent::boot();
static::created(function($model)
{
$model->uuid = Uuid::generate(4)->string;
$model->save();
});
}
public function setFooAttribute($value)
{
$this->attributes['foo'] = $value.'-'.$this->getAttribute('id');
}
答案 0 :(得分:2)
您应该使用getKey()方法获取模型主键的值。像$this->getKey()
答案 1 :(得分:2)
那确实是问题所在。主键通常递增,这意味着:您的数据库本身设置它,在执行'插入'查询。因此在创建模型之前永远不可用。
可以预先计算下一个id,但这非常危险:它可能会产生冲突,例如 - 同时创建两个模型。
您可以将此操作与created()事件相结合,方法是删除setFooAttribute
方法,并在创建的事件中插入一行代码:
public static function boot()
{
parent::boot();
static::created(function($model)
{
$model->uuid = Uuid::generate(4)->string;
$model->foo = $model->foo . '-' . $model->id;
$model->save();
});
}
这会将 -id 附加到原始foo
属性。
只是好奇:为什么要将id附加到列?