Сводная таблица не работает должным образом

Я пытаюсь использовать отношения «многие ко многим» между моими постами и моделями категорий. До сих пор я создавал записи, категории и таблицы 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:

$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.

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


person ytsejam    schedule 29.05.2013    source источник


Ответы (1)


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

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');
    } 
}
person ytsejam    schedule 30.05.2013