Как настроить поле модели перед сохранением в базе данных

У меня есть такая модель:

class Article extends Model {
protected $fillable = [
    'title',
    'body',
    'img_profile', // store name of image
    ];
}

И контроллер, как это:

public function store(ArticleRequest $request){
    $article = Auth::user()->articles()->create($request->all());
    return redirect('articles');
}

И такая форма:

{!! Form::model($article = new \App\Article,['url' => 'articles','files' => true ]) !!}
{!! Form::text('title', null ) !!}
{!! Form::textarea('body', null) !!}
{!! Form::file ('img_profile', '') !!}
{!! Form::submit('Submit') !!}
{!! Form::close() !!}

Когда я отправляю форму, img_profile поле хранится в кэше по умолчанию файл, который /private/var/tmp/phpceBMP2.Но я просто хочу обновить file_name в img_profile,

Как я могу изменить значение img_profile запрос перед сохранением в базе данных?

1 ответ

Вы должны использовать мутатор для Article смоделируйте таким образом:

public function setImgProfileAttribute($value)
{
    $this->attributes['img_profile'] = '/private/var/tmp/phpceBMP2/'. $value;
}

Однако вы должны подумать, действительно ли вы хотите сохранить путь в БД таким способом. Что если вы захотите изменить это в будущем? Вам придется обновить все записи?

Другие вопросы по тегам