雄辩push()和save()的区别

我已经读了关于雄辩的文档,并且被push()部分所吸引。 它说,

有时候,你可能不仅要保存模型,还要保存所有的关系。 为此,您可以使用push方法:

挽救一个模型和关系

$user->push();

在这里看到链接

不好意思,但是我保存()和push()之间的区别有点模糊。 我希望有人能为我解决这个问题。 谢谢。

inheritance人幕后的魔力

 /** * Save the model and all of its relationships. * * @return bool */ public function push() { if ( ! $this->save()) return false; // To sync all of the relationships to the database, we will simply spin through // the relationships and save each model via this "push" method, which allows // us to recurse into all of these nested relations for the model instance. foreach ($this->relations as $models) { foreach (Collection::make($models) as $model) { if ( ! $model->push()) return false; } } return true; } 

它只是表明push()会更新所有与所涉及的模型有关的模型,所以如果你改变了任何关系,那么调用push()它将更新该模型,以及它的所有关系。

 $user = User::find(32); $user->name = "TestUser"; $user->state = "Texas"; $user->location->address = "123 test address"; //This line is a pre-defined relationship 

如果你在这里,只是…

 $user->save(); 

然后地址不会被保存到地址模型….但如果你..

 $user->push(); 

然后它将保存所有的数据,并将地址保存到地址table/model ,因为您在User model定义了该关系。

push()也会更新所有相关模型的所有updated_at时间戳,

希望这将清除的东西….

假设你这样做了:

 $user = User::find(1); $user->phone = '555-0101'; $user->address->zip_code = '99950'; 

您只是对两个不同的表进行了更改,以便保存它们:

 $user->save(); $user->address->save(); 

要么

 $user->push(); 

push()只能用于更新现有的模型实例,而不是创build一个新的模型实例。 简单地说:push()更新,而不是插入。