我试图找出如何使用我的Laravel项目的mutator将我的两个英尺和英寸的表格字段转换为高度属性。
现在我收到的错误是身高不能为空,所以我想弄清楚为什么没有设置它。
// Model
/**
* Set the height field for the user.
*
* @param $feet integer
* @param $inches integer
* @return integer
*/
public function setHeightAttribute($feet, $inches)
{
return $this->attributes['height'] = $feet * 12 + $inches;
}
// Observer
/**
* Listen to the User created event.
*
* @param User $user
* @return void
*/
public function created(User $user)
{
$user->bio()->create([
'hometown' => request('hometown'),
'height' => request('height'),
]);
}
答案 0 :(得分:0)
这不是变异者的工作方式。方法获得的唯一参数是您在创建或更新时将字段设置为的值。应该是。
public function setHeightAttribute($value)
{
return $this->attributes['height'] = $value;
}
在创建方法中指定值之前,应执行英尺和英寸转换。在这种情况下,mutator是无用的。其次,您需要在模型中设置$fillable
属性,以便为您正在创建的字段指定值。
protected $fillable = [
'hometown', 'height',
];
从您的错误判断,看起来您在请求输入中传递了英尺和英寸值。你可以做这样的事情。将输入字段名称替换为您使用的实际名称。
public function created(User $user)
{
$hometown = request('hometown');
$height = (request('feet', 0) * 12) + request('inches', 0);
$user->bio()->create([
'hometown' => $hometown,
'height' => $height,
]);
}