在我的一些测试中,我创建了一个用户模型,运行了一些需要保存某些属性的方法,在rails中,我通常会调用user.reload
这样的函数来重新填充数据库中的属性。
在laravel中有没有这样的方法呢?我通读了API,没有找到一个方法:http://laravel.com/api/4.1/Illuminate/Database/Eloquent/Model.html您对“正确”的方法有什么想法吗?
在我的一些测试中,我创建了一个用户模型,运行了一些需要保存某些属性的方法,在rails中,我通常会调用user.reload
这样的函数来重新填充数据库中的属性。
在laravel中有没有这样的方法呢?我通读了API,没有找到一个方法:http://laravel.com/api/4.1/Illuminate/Database/Eloquent/Model.html您对“正确”的方法有什么想法吗?
6条答案
按热度按时间mkshixfv1#
在8月份,有一个commit提交给了4.0分支,以添加reload()方法,但到目前为止,它还没有与较新的Laravel分支合并。
但是... Laravel 5提供了一个“fresh()”方法,它将 * 返回 * 当前模型的一个新示例。一旦你使用Laravel 5.0或更高版本,你可以像这样重新加载一个模型:
如果您还没有使用Laravel 5,但您想要相同的功能,您可以将此方法添加到您的模型中:
**更新:**如果你使用的是Laravel 5.4.24或更新版本,现在有一个
$model->refresh()
方法,你可以用它来刷新对象的属性和关系,而不是像fresh()
那样获取一个新对象。bt1cpqcv2#
由于5.4.24是
refresh
方法,因此PR#19174可用。这样,您就不必像
fresh
方法的其他答案中所示的那样处理重新赋值,如果您想刷新一个已经传递到另一个方法中的模型,这通常是没有帮助的,因为变量赋值将超出稍后使用的调用上下文的范围。2ic8powd3#
refresh()
是可变操作:它将从数据库重新加载当前模型示例。fresh()
是一个不可变的操作:它从数据库返回一个新的模型示例,但不影响当前示例。fbcarpbf4#
我也看不出来。看来你得:
您也可以自己创建一个:
刚刚在这里测试了一下,看起来很有效,不确定这能走多远,不过,Eloquen是一个相当大的类。
zysjyyx45#
我相信@Antonio的答案是最正确的,但是根据用例,您也可以使用
$model->setRawAttributes
和$model->getAttributes
的组合。这样做的主要缺点是,您只是在"重新加载"数据属性,而不是您更改的任何关系等。这也可能被认为是有利的一面。
对于L5-
fresh()
,应该采用wlp8pajw6#
在Laravel中,您可以使用
refresh
方法刷新模型的数据。此方法从数据库中检索模型的最新数据,并用该数据更新模型的属性。例如:在此示例中,
refresh
方法用于从数据库中检索ID为1的用户的最新数据,并使用该数据更新$user
模型的属性。如果另一个进程已更新数据库中的数据,并且您希望确保模型的数据是最新的,则此方法非常有用。