我想创建en 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而不是" save"。
任何帮助表示感谢。
答案 0 :(得分:1)
当您了解
时,这实际上非常简单$post->tags()->add($tag);
一样。这将访问标记关系ala查询构建器,但您要查看的内容只需将标记添加到您的帖子中。
Laravel并没有内置的方法来处理这个问题,但你可以像这样轻松接近它:
见下文
$post->addTag($tag); // Adding a tag to our tag array
protected $attributes = [
'tags' => [],
];
//type hint a tag and push the tag into our tags attribute
public function addTag(Tag $tag) {
array_push($this->attributes['tags'], $tag);
}
//Iterate over the tags and attach them to our Post model,
also save the post model after.
public function push() {
return collect($this->attributes['tags'])->each(function($tag){
$this->attach($tag);
});
$this->save();
}
我还没有对代码进行测试,但这有望让您走上正确的道路。我也有兴趣知道为什么你发现你的自我推动这个实现?我之前没有找到类似这样的用例,也许可以帮助您找到更标准化的方法来处理您的用例。