0

我正在尝试在我的帖子和类别模型之间使用多对多关系。到目前为止,我创建了 posts 、 categories 和 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。

谁能帮我解决这个问题?

4

2 回答 2

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');
    } 
}
于 2013-05-30T08:04:05.673 回答
0
$post->categories()->attach($category->id);
于 2013-05-29T20:15:02.393 回答