2015-07-09 4 views
2

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

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 хранится по умолчанию в кеш-файле, который равен.. Но я просто хочу обновить file_name в img_profile.

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

ответ

4

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

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

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

+0

По умолчанию Laravel сохраняет значение 'img_profile' как'/private/var/tmp/phpceBMP2', теперь я хочу настроить его на имя изображения, например 'img_file_name'. –

Смежные вопросы