中間テーブルのひも付けを行いたいのですが
$post->tags()->attach($tags_id);
「Method Illuminate\Http\Request::tags does not exist.」
↑の部分でエラーがでて困っています。
このエラーが起こる原因が掴めません
解決方法をご教示くださいよろしくお願いします。
【参考サイト】
https://qiita.com/AkiYanagimoto/items/b363d673d9f2bf63fc0f
修正後------------------------------------
$post->tags()->attach($tags_id);
「Call to a member function tags() on array」
TOXI法によるタグ付け機能を考えています
テーブルはこのような感じです
posts
id | title | body |
---|---|---|
post_tag
id | post_id | tag_id |
---|---|---|
tags
id | tag_name |
---|---|
#PostsController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Post; use App\Tag; class PostsController extends Controller { //... public function store(Request $request) { $post = new Post;//追加 $post = $request->validate([ 'title' => 'required|max:50', 'body' => 'required|max:2000', ]); preg_match_all('/#([a-zA-z0-90-9ぁ-んァ-ヶ亜-熙]+)/u', $request->tags, $match); $tags = []; foreach ($match[1] as $tag) { $record = Tag::firstOrCreate(['tag_name' => $tag]); array_push($tags, $record); } $tags_id = []; foreach ($tags as $tag) { array_push($tags_id, $tag['id']); } $post->tags()->attach($tags_id);//エラー箇所 //... } //... }
#Post.php <?php namespace App; use Illuminate\Database\Eloquent\Model; class Post extends Model { protected $fillable = [ 'title', 'body', ]; public function tags() { return $this->belongsToMany('App\Tag','post_tag');//修正 } { # Tag.php <?php namespace App; use Illuminate\Database\Eloquent\Model; class Tag extends Model { protected $fillable = [ 'tag_name', ]; public function posts() { return $this->belongsToMany('App\Post','post_tag');//修正 } }
#web.php Route::resource('posts', 'PostsController', ['only' => ['create', 'store', 'show', 'edit', 'update', 'destroy']]);
回答1件
あなたの回答
tips
プレビュー