Laravel 数据模型中 `isDirty()` 和 `wasChanged()` 有区别吗?

是有区别的。

相关代码: github.com/laravel/framework/blob/...

isDirty 函数的代码如下:

/**
 * 判断模型或者任意指定模型属性是否被修改过
 *
 * @param  array|string|null  $attributes
 * @return bool
 */
public function isDirty($attributes = null)
{
    return $this->hasChanges(
        $this->getDirty(), is_array($attributes) ? $attributes : func_get_args()
    );
}

getChanges() 和 getDirty() 函数的代码如下

/**
 * 获取自从最后一次同步以来,被修改的属性值
 *
 * @return array
 */
public function getDirty()
{
    $dirty = [];
    foreach ($this->getAttributes() as $key => $value) {
        if (! $this->originalIsEquivalent($key, $value)) {
            $dirty[$key] = $value;
        }
    }
    return $dirty;
}
/**
 * 获取所有已经被修改的属性.
 *
 * @return array
 */
public function getChanges()
{
    return $this->changes;
}

简而言之.

答案引用于: laracasts.com/discuss/channels/elo...

isDirty (and getDirty) 用在保存前置执行, 查看哪些属性在从数据库检索到调用之间被修改过, 而 wasChanged (and getChanges)是保存后置执行,查看属性是否在上次保存中(从代码到数据库)被修改或者更新.

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://stackoverflow.com/questions/5831...

译文地址:https://learnku.com/laravel/t/61576

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 1

一个判断,返回值是 bool 值;一个获取改变的值 ,返回值是 array

2年前 评论
Summer (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!