【问题标题】:Laravel (5) - how to use getKey() in a model manipulator on 'create'Laravel (5) - 如何在“创建”的模型操纵器中使用 getKey()
【发布时间】:2017-04-18 15:44:45
【问题描述】:

我正在尝试创建一个新闻项目并将其缩略图存储在与其主键对应的位置:$this->getKey。这在 update 上有效,因为密钥可用,但在 create 上不可用。

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

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

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

更新这会导致正确

'news/1/thumbnail_image/'

创建时,这会导致不正确

'新闻//thumbnail_image/'

如何使用 mutator 实现这一点,还是有其他方法?

【问题讨论】:

  • 这看起来像一个派生属性。您不应该将其存储在数据库中(特别是考虑到从现有记录构建它是微不足道的)。

标签: php laravel laravel-5 eloquent mutators


【解决方案1】:

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

【讨论】:

  • 我在想同一个方向,但我 Laravel 用 $value 调用这个方法.. mm 也许我可以手动从 request() 中得到它
【解决方案2】:

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

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();
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-29
    • 2015-04-26
    • 2016-11-22
    • 1970-01-01
    • 2019-07-18
    • 2016-02-26
    • 1970-01-01
    • 2016-04-15
    相关资源
    最近更新 更多