Я запускаю интеграционный тест и получаю следующую ошибку:
array:5 [
"message" => "Argument 1 passed to App\Models\Order::getPhoneAttribute() must be of the type string, null given, called in /Users/bigweld/Sites/restaurantbe/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php on line 454"
"exception" => "Symfony\Component\Debug\Exception\FatalThrowableError"
"file" => "/Users/bigweld/Sites/restaurantbe/app/Models/Order.php"
"line" => 87
"trace" => array:44 [
Так что, похоже, это связано с моими мутаторами:
public function setPhoneAttribute(string $phone) : void
{
$this->attributes[self::ORDER_PHONE] = empty($phone) ? "" : preg_replace("/[^A-Za-z0-9 ]/", '', $phone);
}
public function getPhoneAttribute(string $phone) : string
{
return is_null($phone) ? "": preg_replace('~.*(\d{3})[^\d]*(\d{3})[^\d]*(\d{4}).*~',
'($1)-$2-$3', $phone);
}
мой тест не передает Order::ORDER_PHONE
, что означает, что пустая строка должна храниться в базе данных. Если я объявлю поле в массиве данных вместе с другими полями, даже если оно пустое (ie: [ Order::ORDER_PHONE => "" ]
), эта ошибка не появится.
Есть идеи, почему?