【发布时间】:2017-05-09 13:04:26
【问题描述】:
我想创建一个 Eloquent 模型,而不是立即将它保存到数据库中。但是,我希望包含所有关系,以便通过单个“push()”调用我可以保存整个结构。
下面的示例显示了我想要做的事情。我建立了以下关系:
class Post extends Eloquent
{
public function tags()
{
return $this->belongsToMany('Tag');
}
}
class Tag extends Eloquent
{
public function posts()
{
return $this->belongsToMany('Post');
}
}
很标准,一个帖子可以有很多标签,一个标签可以属于很多帖子。
我知道我现在可以简单地做到这一点:
//save the post
$post = new Post;
$post->save();
//assign the tag
$post->tags()->save($tag);
但是,我真正想要的是:
//create the post
$post = new Post;
//assign the tag (without saving anything yet!)
$post->tags()->add($tag);
//save the whole thing
$post->push();
相关文档是 here,但似乎没有在 belongsToMany 上提到“添加”而不是“保存”。
任何帮助表示赞赏。
【问题讨论】:
-
我认为这是不可能的。帖子和标签是这样关联的,如果我没记错的话,标签有post_id,只有在保存帖子时才会生成id,然后才能将标签与帖子相关。
-
当然 - 实际上 post_id 和 tag_id 都将在 post_tag 表中,但要点。我仍然认为这是可能的。从实现的角度来看,我想它需要在枢轴之前简单地创建父母。所以当然有可能——但目前可能还没有实现。
-
如果您有这样的数据透视表并且使用其他一些标识符作为外键而不是使用生成的 id,这似乎是可能的。有了它,您可以先保存数据透视表,然后保存帖子和相关标签。
-
所以我听到的是,正如我所怀疑的,laravel 目前没有这样做的功能?我需要编写一个自定义保存函数来按正确的顺序执行此操作吗?
-
你也许可以用 Laravel 的方式做到这一点,我对 laravel 的经验并不多,但应该有出路。
标签: laravel laravel-5 eloquent