Я использую Laravel 5. Я следую этому руководству об использовании формы для создания статьи с «тегами». Я заменил теги на категории. Мои статьи принадлежат ко многим категориям, а мои категории принадлежат ко многим статьям. У меня есть форма для создания новой статьи, но она создает только запись в таблице articles
а не в сводной таблице article_category
.
Я получаю эту ошибку:
FatalErrorException in ArticlesController.php line 77:
Вызов функций-членов () в массиве
Я думаю, проблема связана с четвертой строкой в функции store
. Я не могу найти никого с той же проблемой. Эта строка должна прикреплять id
статьи к ids
категорий, но она не работает. Благодарен за любую помощь.
Мои статьиКонтроллер:
public function store(CreateArticleRequest $request) { $article = $request->all(); Article::create($article); $categoriesId = $request->input('categories'); $article->categories()->attach($categoriesId); return redirect()->route('articles_path'); }
Пространства имен:
namespace App\Http\Controllers; use App\Article; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Requests\CreateArticleRequest; use App\Http\Controllers\Controller; use App\Category; use App\Day;
Маршруты:
Route::resource('articles', 'ArticlesController', [ 'names' => [ 'index' => 'articles_path', 'show' => 'article_path', 'edit' => 'articleEdit_path', 'update' => 'articleUpdate_path', 'create' => 'articleCreate_path', 'store' => 'articleStore_path' ] ]);
Модель статьи:
namespace App; use Illuminate\Database\Eloquent\Model; class Article extends Model { public function categories() { return $this->belongsToMany('App\Category', 'article_category', 'category_id', 'article_id')->withTimestamps(); } protected $fillable = array('title', 'description', 'image', 'lat', 'lng'); }
Категория Модель
namespace App; use Illuminate\Database\Eloquent\Model; class Category extends Model { public function articles() { return $this->belongsToMany('App\Article', 'article_category', 'article_id', 'category_id')->withTimestamps(); } protected $fillable = array('name'); }
Сводная таблица:
Schema::create('article_category', function (Blueprint $table) { $table->integer('article_id')->unsigned()->index(); $table->foreign('article_id')->references('id')->on('articles')->onDelete('cascade'); $table->integer('category_id')->unsigned()->index(); $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade'); $table->timestamps(); });
Это похоже на ошибку:
$article = $request->all(); Article::create($article);
Попробуйте это вместо этого
$article = Article::create($request->all());
EDIT Исправить это отношение в вашей модели статьи
public function categories() { return $this->belongsToMany('App\Category', 'article_category', 'article_id', 'category_id')->withTimestamps(); }