2013-05-29 4 views
0

Я пытаюсь использовать отношения «многие ко многим» между моделями сообщений и категорий. Пока я создал записи, категории и таблицы post_categories.Сводная таблица работает не так, как ожидалось

В моей модели, у меня есть свои отношения

class Post extends Eloquent { 
    public function categories() 
    { 
     return $this->belongsToMany('Category', 'post_categories','category_id'); 
    } 
} 
class Category extends Eloquent { 
    public function posts() 
    { 
     return $this->belongsToMany('Post','post_categories'); 
    } 
} 

и в моих контроллерах, когда я пытаюсь создать экземпляр сообщения:

$post = new Post; 

     $post->title   = e(Input::get('title')); 
     $post->slug    = e(Str::slug(Input::get('title'))); 
     $post->content   = e(Input::get('content')); 
     // Was the blog post created? 
     if($post->save()) 
     { 
      $id = (int) Input::get('category_id'); 
      $category = Category::find($id); 

      $post->categories()->attach($category); 
      // Redirect to the new blog post page 
      return Redirect::to("admin/blogs/$post->id/edit")->with('success', Lang::get('admin/blogs/message.create.success')); 
    } 

После отправки формы, я могу видеть в блоге пост созданный нормально. Когда я проверяю db, Category_id вставлен в таблицу post_categories, но post_id всегда 0.

Может ли кто-нибудь помочь мне исправить это?

ответ

0

Я использовал отношения неправильно. Стол должен был знать имя второго столбца таблицы.

class Post extends Eloquent { 
    public function categories() 
    { 
     return $this->belongsToMany('Category', 'post_categories','category_id','post_id'); 
    } 
} 
class Category extends Eloquent { 
    public function posts() 
    { 
     return $this->belongsToMany('Post','post_categories',,'post_id','category_id'); 
    } 
} 

Лучшее использование будет изменять имя таблицы и сделать его category_post стол. Таким образом, все, что я должен сделать, это

class Post extends Eloquent { 
    public function categories() 
    { 
     return $this->belongsToMany('Category'); 
    } 
} 
class Category extends Eloquent { 
    public function posts() 
    { 
     return $this->belongsToMany('Post'); 
    } 
}