Laravel - 更新模型时更新另一个属性
Laravel - Update another attribute when updating model
在我的一个模型中,当同一模型的其他两个属性更新时,我需要更新另一个属性。
在我的例子中,使用 Accessor
不是一个选项,因为在某些情况下我需要执行数据库查询以查找 full_phone_number
.
达到预期结果的最佳方法是什么?
这是我的模型:
class Address extends Model {
protected $fillable = [
'country_code',
'phone_number',
'full_phone_number',
];
}
当我创建一个新的 Address
时,我需要自动填充 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_code
或 phone_number
时,我需要自动更新 full_phone_number
列:
$address->update([
'phone_number' => 1188888888
]);
预期结果是:
# Address model on DB
{
"country_code": 55,
"phone_number": 1188888888,
"full_phone_number": 551188888888
}
我使用 events
得到了想要的结果,但我不知道这是否是处理这种情况的最佳方式。同样可以转换为 observer
.
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;
});
}
}
在我的一个模型中,当同一模型的其他两个属性更新时,我需要更新另一个属性。
在我的例子中,使用 Accessor
不是一个选项,因为在某些情况下我需要执行数据库查询以查找 full_phone_number
.
达到预期结果的最佳方法是什么?
这是我的模型:
class Address extends Model {
protected $fillable = [
'country_code',
'phone_number',
'full_phone_number',
];
}
当我创建一个新的 Address
时,我需要自动填充 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_code
或 phone_number
时,我需要自动更新 full_phone_number
列:
$address->update([
'phone_number' => 1188888888
]);
预期结果是:
# Address model on DB
{
"country_code": 55,
"phone_number": 1188888888,
"full_phone_number": 551188888888
}
我使用 events
得到了想要的结果,但我不知道这是否是处理这种情况的最佳方式。同样可以转换为 observer
.
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;
});
}
}