我已经阅读了有关 eloquent 的 laravel 4 文档,并且对 push() 部分非常感兴趣。它说,
有时您可能不仅希望保存模型,还希望保存它的所有关系。为此,您可以使用 push 方法:
保存模型和关系
$user->push();
抱歉,我对 save() 和 push() 之间的区别有点模糊。我希望有人可以为我清除这个。谢谢你。
这就是幕后的魔力……
/**
* 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 时间戳push()
希望这将清除的事情......
假设你这样做了:
$user = User::find(1);
$user->phone = '555-0101';
$user->address->zip_code = '99950';
您刚刚对两个不同的表进行了更改,要保存它们,您必须:
$user->save();
$user->address->save();
或者
$user->push();
push() 只能用于更新现有模型实例及其关系,而不是创建新模型实例。简单地说: push() 更新而不是插入。