Laravel Mutator和模型观察员

时间:2017-05-29 16:40:44

标签: php laravel laravel-5.3

我试图找出如何使用我的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'),
    ]);
}

1 个答案:

答案 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,
    ]);
}