63

我已经阅读了有关 eloquent 的 laravel 4 文档,并且对 push() 部分非常感兴趣。它说,

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

保存模型和关系

$user->push();

请参阅此处的链接

抱歉,我对 save() 和 push() 之间的区别有点模糊。我希望有人可以为我清除这个。谢谢你。

4

3 回答 3

108

这就是幕后的魔力……

/**
 * 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()

希望这将清除的事情......

于 2013-06-11T02:45:01.903 回答
41

假设你这样做了:

$user = User::find(1);

$user->phone = '555-0101';
$user->address->zip_code = '99950';

您刚刚对两个不同的表进行了更改,要保存它们,您必须:

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

或者

$user->push();
于 2013-06-11T02:45:06.603 回答
5

push() 只能用于更新现有模型实例及其关系,而不是创建新模型实例。简单地说: push() 更新而不是插入。

于 2017-07-22T00:44:13.190 回答