如何从Laravel中的数据库重新加载/刷新模型?

2022-08-30 08:57:06

在我的一些测试中,我有一个我创建的用户模型,我运行了一些需要保存某些属性的方法。在 rails 中,我通常会调用类似的东西,这将从数据库中重新填充属性。user.reload

在laravel中有没有办法做到这一点?我通读了api,找不到一种方法:http://laravel.com/api/4.1/Illuminate/Database/Eloquent/Model.html 关于“正确”方法来做到这一点的任何想法?


答案 1

在八月份向4.0分支提交了一个提交,以添加reload()方法,但到目前为止,它还没有与较新的Laravel分支合并。

但。。。Laravel 5提供了一个“fresh()”方法,该方法将返回当前模型的新实例。使用Laravel 5.0或更高版本后,您可以像这样重新加载模型:

$model = $model->fresh(); 

请注意,fresh() 不会直接更新您现有的$model,它只是返回一个新实例,因此我们需要使用“$model = ”。它还接受一个参数,该参数是您希望它预先加载的关系数组。

如果您尚未使用Laravel 5,但想要相同的功能,则可以将此方法添加到模型中:

public function fresh(array $with = array())
{
    $key = $this->getKeyName();
    return $this->exists ? static::with($with)->where($key, $this->getKey())->first() : null;
}

更新:如果您使用的是 Laravel 5.4.24 或更高版本,现在有一种方法可用于刷新对象的属性和关系,而不是像这样获取新对象。请参阅Jeff Puckett的答案,了解更多细节。$model->refresh()fresh()


答案 2

由于PR#19174可用,因为5.4.24是该方法。refresh

$model->refresh();

这样,您就不必像该方法的其他答案中所示的那样处理重新分配,如果要刷新已传递到另一个方法的模型,这通常没有帮助,因为变量赋值将超出调用上下文以后使用的范围。fresh


推荐