php - Laravel - 更新模型时更新另一个属性

标签 php laravel eloquent

在我的一个模型中,当更新同一模型中的其他两个属性时,我需要更新另一个属性。

就我而言,使用 Accessor 不是一种选择,因为在某些情况下,我需要执行数据库查询来查找 full_phone_number

什么是达到预期结果的最佳方法?

这是我的模型:

class Address extends Model {
    
    protected $fillable = [
        'country_code',
        'phone_number',
        'full_phone_number',
    ];
    
}

当我创建新的地址时,我需要自动填充full_phone_number列:

$address = Address::create([
    'country_code' => 55,
    'phone_number' => 1199999999
]);

预期结果是:

# Address model on DB
{
    "country_code": 55,
    "phone_number": 1199999999,
    "full_phone_number": 551199999999
}

当我从 Address 更新 country_codephone_number 时,我需要自动更新 full_phone_number 列:

$address->update([
    'phone_number' => 1188888888
]);

预期结果是:

# Address model on DB
{
    "country_code": 55,
    "phone_number": 1188888888,
    "full_phone_number": 551188888888
}

最佳答案

我使用事件获得了所需的结果,但我不知道这是否是处理这种情况的最佳方法。同样可以转换为观察者

class Address extends Model {

    protected $fillable = [
        'country_code',
        'phone_number',
        'full_phone_number',
    ];
    
    protected static function boot()
    {
        parent::boot();

        static::updating(function ($address) {
            $address->full_phone_number = $address->country_code . $address->number;
        });
    }

}

关于php - Laravel - 更新模型时更新另一个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69621751/

相关文章:

php - 如何下载MongoDB 3.0?

javascript - 了解 Laravel 混合

php - 拉维尔 5 : Using SHA1 instead of Bcrypt

mysql - Laravel:查询直接在 MySQL 上运行,但不能在 DB 上运行

php - Laravel 的递归 ->toArray()

php - Yii PHP- 属性未定义

PHP 没有将图像上传到数据库或服务器?

javascript - 使用 jQuery Ajax 和 Mysql 生成 HTML

database - Laravel 迁移命令

php - 创建和更新 Laravel Eloquent