Laravel 增变器不自动设置模型属性
Laravel mutator do not set model attribute automatically
在我的项目中有一个 PackageRequest
模型,这个模型有一个 tracking_code
。
我想用一个增变器自动设置这个属性。
这是我的突变体:
public function setTrackingCodeAttribute()
{
$code = mt_rand(1000000, 9999999);
$this->attributes['tracking_code'] = "$code";
}
但是当我将新请求保存到数据库时没有tracking_code
这是我创建新 PackageRequest 的代码部分:
public function store(Request $request)
{
$input = $request->only(['requested_time', 'address_id']);
$valid = validator($input, [
'requested_time' => 'required|date',
'address_id' => 'required|numeric|exists:addresses,id'
]);
if ($valid->fails())
return Response::fail($valid->errors());
$package_request = new PackageRequest($input);
$package_request->user_id = \Auth::id();
$package_request->status = 'waiting';
if(!$package_request->save())
return Response::error(__('errors.save_data', ['attr' => __('errors.attribures.package_request')]));
return Response::success(PackageRequest::find($package_request->id), 201);
}
The mutator will receive the value that is being set on the attribute, allowing you to manipulate the value and set the manipulated value on the Eloquent model's internal $attributes
property.
当您尝试将值设置为属性 tracking_code
并且您未对其设置任何内容时,将自动调用增变器。您需要在 creating
之前将默认值设置为 tracking_code
,这样您就可以在模型 PackageRequest 中添加这些代码:
protected static function boot()
{
parent::boot();
static::creating(function($package_request)
{
$package_request->tracking_code = mt_rand(1000000, 9999999);
});
}
在我的项目中有一个 PackageRequest
模型,这个模型有一个 tracking_code
。
我想用一个增变器自动设置这个属性。
这是我的突变体:
public function setTrackingCodeAttribute()
{
$code = mt_rand(1000000, 9999999);
$this->attributes['tracking_code'] = "$code";
}
但是当我将新请求保存到数据库时没有tracking_code
这是我创建新 PackageRequest 的代码部分:
public function store(Request $request)
{
$input = $request->only(['requested_time', 'address_id']);
$valid = validator($input, [
'requested_time' => 'required|date',
'address_id' => 'required|numeric|exists:addresses,id'
]);
if ($valid->fails())
return Response::fail($valid->errors());
$package_request = new PackageRequest($input);
$package_request->user_id = \Auth::id();
$package_request->status = 'waiting';
if(!$package_request->save())
return Response::error(__('errors.save_data', ['attr' => __('errors.attribures.package_request')]));
return Response::success(PackageRequest::find($package_request->id), 201);
}
The mutator will receive the value that is being set on the attribute, allowing you to manipulate the value and set the manipulated value on the Eloquent model's internal
$attributes
property.
当您尝试将值设置为属性 tracking_code
并且您未对其设置任何内容时,将自动调用增变器。您需要在 creating
之前将默认值设置为 tracking_code
,这样您就可以在模型 PackageRequest 中添加这些代码:
protected static function boot()
{
parent::boot();
static::creating(function($package_request)
{
$package_request->tracking_code = mt_rand(1000000, 9999999);
});
}