【问题标题】:How to insert record with many belongsTo relations in Laravel Eloquent如何在 Laravel Eloquent 中插入具有多个 belongsTo 关系的记录
【发布时间】:2015-03-02 03:43:51
【问题描述】:

我正在尝试以 Eloquent 方式插入记录。

在基本情况下很清楚。例如,如果我有一个带有帖子的博客,并且每个帖子都属于一个用户,我可以这样做:

$post = new Post;
$post->content = 'Post content';
$user->posts()->save($post);

但是如果我的帖子同时属于用户、类别和组,我该怎么做呢?

我的第一个想法是这样做:

$post = new Post;
$post->content = 'Post content';
$user->posts()->save($post);
$group->posts()->associate($post);
$cat->posts()->associate($post);

但它不起作用,因为当我将其保存到数据库时,组 id 和类别 id 为空,这是不允许的。

我现在做的是:

$post = new Post;
$post->content = 'Post content';
$post->group = $group->id;
$post->category = $cat->id;
$user->posts()->save($post);

但我不认为这是正确的方式。

有人能指出我正确的方向吗?

【问题讨论】:

标签: php laravel orm eloquent


【解决方案1】:

您以错误的方式使用associate。您必须在 belongsTo 关系方而不是 hasMany 上调用它。

试试这个:

$post = new Post;
$post->content = 'Post content';
$post->category()->associate($cat);
$post->group()->associate($group);
$user->posts()->save($post);

【讨论】:

  • 这很有意义,但我无法让它工作。在我的 Post 模型中,我有一个名为 group() 的关系“belongsTo”。但是当我做 $post->group()->associate($group);我收到“未定义的属性组”错误。我会继续努力并通知您。
  • 嗯,你能用关系定义更新你的问题吗?也许这就是问题所在。
  • 我想我找到了我遇到这个问题的原因:stackoverflow.com/questions/25026123/…
  • 啊,是的,你不能那样做。如果 group 是外键,我建议您将其命名为 group_id (那么您甚至不必在关系中定义它,因为您遵循约定)
  • 是的,这就是问题所在。所以你的解决方案是完美的。非常感谢卢卡斯! :)
猜你喜欢
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
  • 2019-02-15
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
相关资源
最近更新 更多