【问题标题】:Inserting one to many relationship插入一对多关系
【发布时间】:2013-03-26 23:52:43
【问题描述】:

我有三个表:blogs、posts、blog_post。这是我的代码。

$post = new Post(); 
$post->title    = HTML::entities(Input::get('title'));
$post->content  = Input::get('content');
$post->status   = isset($_POST['save']) ? 2 : 1;
$post->save();

$blog = Blog::where('user_id', '=', Auth::user()->id)->first();

$post = $blog->posts()->insert($post);

我得到:

SQLSTATE[23000]:违反完整性约束:1062 重复条目 键 'PRIMARY' 的 '47'

我有一对多的关系。一篇文章可以属于多个博客。

【问题讨论】:

  • 听起来你有一个多对多的关系。
  • 嗯,一篇文章属于许多博客,一个博客可以有许多文章。
  • 是的,这就是多对多关系的定义,不同于你所说的一对多关系。
  • 哦,好的,谢谢。因此,任何关于如何保存帖子的想法我都可以在blog_post 中添加指向post_idblog_id 的记录。
  • 不幸的是,我不了解 Laravel,所以我不会给出“答案”,但看起来你已经建立了一对多的关系,并且你正在尝试创建发布两次 - 一次在 save() 行,一次在 insert() 行。我假设该框架有一种方法可以建立多对多关系并将博客“添加”到帖子中,反之亦然。

标签: laravel


【解决方案1】:

at13 答案是正确的。您正在保存帖子,然后尝试通过博客关系再次插入。

根据你的 cmets 你应该有:

$post->has_many_and_belongs_to('blog');
$blog->has_many_and_belongs_to('post');

考虑到这一点,要创建多对多关系,您应该使用attach()。 例如:

$post = new Post;
$post->title = "Foo Bar";
// ...
$post->save();

$user = Auth::user();
$blog = $user->blogs()->first();
$blog->posts()->attach($post);

Obs:我不太明白帖子属于多个博客的概念。

【讨论】:

  • 因为一个用户可以拥有多个博客,并且他们可以为他们创建的许多博客添加帖子。 = )
猜你喜欢
  • 2017-02-12
  • 2021-06-30
  • 2015-03-16
  • 2022-12-18
  • 2019-04-17
  • 2021-03-09
  • 1970-01-01
  • 1970-01-01
  • 2020-11-11
相关资源
最近更新 更多