Laravel在setAttribute中获取模型ID

时间:2016-11-21 04:26:15

标签: php laravel model eloquent

我有这样的模型,我想在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');
        }

2 个答案:

答案 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附加到列?