2015-06-01 3 views
2

Я новичок в Laraval 5 Я смотрю учебники «Основы Laravel 5», и у меня есть проблема.Обновление отношений модель laravel

Статья модель

public function category() 
{ 
    return $this->belongsTo('App\Category'); 
} 

Категория модель

public function article() 
{ 
    return $this->hasMany('App\Article'); 
} 

ArticleController

public function create() 
{ 
    $categories = Category::lists('name', 'id'); 

    return view('admin.article.create', compact('categories')); 
} 

public function store(ArticleRequest $request) 
{ 
    $article = new Article($request->all()); 
    $category = Category::find($request->input('categories')); 
    $article->category()->associate($category); 
    \Auth::user()->article()->save($article); 

    return \Redirect::to('/admin/article'); 
} 

public function edit(Article $article) 
{ 
    $categories = Category::lists('name', 'id'); 

    return view('admin.article.edit', compact('article', 'categories')); 
} 

public function update(Article $article, ArticleRequest $request) 
{ 
    $article->update($request->all()); 

    return redirect('admin/article'); 
} 

Как я могу обновить модель статьи и связанной с ними модели категории?

ответ

0

Вы можете обновить следующим образом: (оригинальный источник: http://laravel.com/docs/5.0/eloquent#insert-update-delete)

public function update(Article $article, ArticleRequest $request) 
{ 
    $newValues = $request->except('_method', '_token'); 
    foreach($newValues as $key => $value) 
    { 
     $article[$key] = $value; 
    } 
    $article->save(); 

    return redirect('admin/article'); 
} 

или

public function update(Article $article, ArticleRequest $request) 
{ 
    $article->title = $request->input('title'); 
    //all article's table columns = $request->input('corresponding_input_name') 
    $article->save(); 

    return redirect('admin/article'); 
} 

Как sugguested по @patricus:

public function update(Article $article, ArticleRequest $request) 
{ 
    $article->fill($request->all()); 
    $article->save(); 
    return redirect('admin/article'); 
} 
+0

I поколения ошибка: Колонка не найдено: 1054 Неизвестный столбец '_method' в 'списке полей' (SQL: insert в 'articles' (' _method', '_token',' title', 'slug',' category_ значения id', 'body',' updated_at', 'created_at') (PATCH, ***, Первая статья, первая статья, 2, lorem ipsum 11, 2015-06-01 17:39:19, 2015-06 -01 17:39:19)) –

+0

исключить _method или _token вот так: $ request-> except ('_ method', '_token'); Я написал foreach, ожидая, что $ request-> all() содержит все ваши столбцы таблицы. Просто возьмите из $ request нужные столбцы, и они должны иметь одно и то же имя. – brlebtag

+0

@brlebtag Вы должны использовать метод 'fill()' для модели. Это учитывает любые «заполняемые» или «защищенные» ограничения для модели, а также автоматически игнорирует любые параметры, начинающиеся с подчеркивания (например, _token и _method). – patricus

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