Laravel(5) - 如何在“创建”模型操纵器中使用getKey()

时间:2017-04-18 15:44:45

标签: php laravel laravel-5 eloquent mutators

我尝试创建新闻项并将其缩略图存储在与其主键对应的位置: $ this-> getKey 。这适用于更新,因为密钥可用,但在 create 上则不然。

我正在使用操纵器 setThumbnailImageAttribute 来处理文件上传:

public function setThumbnailImageAttribute($value) {
    $this->setImage(
        'thumbnail_image',
        $value,
        'news/'.$this->getKey().'/thumbnail_image/'
    );
}

setImage 处理上传并为属性设置正确的值(以及数据库)

更新上,结果正确

  

'新闻/ 1 / thumbnail_image /'

创建上,这会导致错误

  

'新闻// thumbnail_image /'

如何使用mutator实现这一目标,还是采用不同的方法?

2 个答案:

答案 0 :(得分:1)

这是你的方法无法实现的,是的!有一些讨厌的黑客这样做。但是你必须在创建记录后手动调用此方法。

答案 1 :(得分:0)

在模型文件中,您可以使用这些方法,您可以轻松地将您的代码注入到保存的方法中

class SomeTable extends Model
{
 protected static function boot()
    {
        static::creating(function ($model) {
            print('creating  triggered');
            // print_r(var_dump($model));
            print_r(var_dump($model->getKey())); //returns null
        });
        static::saving(function ($model) {
            print('saving  triggered');
            print_r(var_dump($model->getKey())); // returns null
        });
        static::saved(function ($model) {
            print('saved session triggered');
            print_r(var_dump($model->getKey())); //returns the id
        });

        static::updating(function ($model) {
            print('updating  triggered');            
        });

        static::deleting(function ($model) {
            // bluh bluh
        });
        
        parent::boot();
    }

}