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

标签 php laravel unit-testing laravel-4 eloquent

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

laravel 有办法做到这一点吗?我通读了 api,但找不到方法:http://laravel.com/api/4.1/Illuminate/Database/Eloquent/Model.html关于执行此操作的“正确”方法有什么想法吗?

最佳答案

有一个commit提交到 8 月做的 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 或更新版本,现在有一个 $model->refresh() 方法可以用来刷新对象的属性和关系就位,而不是像 fresh() 那样获取新对象。有关详细信息,请参阅 Jeff Puckett 的回答。

关于php - 如何从 Laravel 的数据库中重新加载/刷新模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23642950/

相关文章:

php - 使用ajax发布表单数据?

PHP & MySQL 地理距离计算

php - Laravel 8 Jetstream Inertia 所有 Inertia 请求都必须收到有效的 Inertia 响应

c# - Blazor 测试 InputDate 与 bUnit 的绑定(bind)

java - 如何使用 Mockito 模拟包含 EntityManager

javascript - Jquery Ajax Post 输入数据数组

php - 找不到类 'FacebookSession' - API Facebook 4.0

javascript - Vue.js 脚本在 Laravel 5.5 中不执行任何操作

javascript - Laravel,如何将此 Blade {{ url (' ' ) }} 转换为普通 html?

c++ - 如何使用已删除的复制构造器模拟方法返回对象?