2017-11-18 2 views
0

に複数のタグを挿入できませんでした。私は複数のタグでポストレコードを挿入したいので、ここで店@郵便で私のコードです:はLaravel

$post = Post::create(array(
      'title' => $request->title, 
      'body' => $request->body, 
      'user_id' => Auth::id(), 
     )); 

     if($post && $request->tags) 
     { 
      $tagNames = explode(',', $request->tags); 
      $tagIds = []; 
      foreach($tagNames as $tagName) 
      { 
       $tag = Tag::firstOrCreate(['name'=>$tagName]); 
       if($tag) 
       { 
        $tagIds[] = $tag->id; 
       } 
      } 

      $post->tags()->attach($tagIds); 
     } 

が、それは私にエラー"Call to a member function attach() on null"を与えます。私はmysqlでチェックされているときに、タグはすでにそこにあるが、私は私のpost_tagテーブル上のエントリを見つけることができません。ここに私のポストモデルです:

class Post extends Model 
{ 
    protected $fillable = ['user_id','title','slug','body','tags','category_id','featured']; 

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

    public function tags() 
    { 
     $this->hasMany('App\Tag'); 
    } 
} 

答えて

1

あなたのPostモデルでコールhasManyを返却する必要があります。

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

更新

あなたはbelongsToManyないhasManyを使用する必要があります。

+0

私はこのエラーを持っています。 "不明なメソッドを呼び出す\データベース\クエリ\ビルダー::アタッチ()" – Ying

+0

'hasMany'ではなく' belongsToMany'であるべきです。 – Hamoud

+0

、ありがとう。あなたはbelongsToManyであなたの答えを更新できますか?私はそれを選択します。 – Ying