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 테이블에있는 항목을 찾을 수 없습니다 체크입니다. 당신은 당신의 Post 모델의 호출에게 hasMany를 반환해야

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

: 여기 내 게시물 모델입니다.

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

당신은 belongsToMany하지 hasMany를 사용해야합니다

업데이트.

+0

이제이 오류가 발생했습니다. "정의되지 않은 메소드 호출 \ Database \ Query \ Builder :: attach()"를 호출합니다. – Ying

+0

'hasMany'가 아닌'belongsToMany'이어야합니다. – Hamoud

+0

감사합니다. belongsToMany로 답변을 업데이트 할 수 있습니까? 나는 그것을 선택할 것이다. – Ying