У меня есть модель StoreDataProduct, которая имеет два преобразования
protected $casts = [
'default_image' => 'array',
'images' => 'array',
];
Теперь в двух местах моего приложения эта модель некорректно работает с приведениями.
Сначала где-то в методе обновления я превращаю модель в массив для быстрого обновления всех измененных значений.
$productArray = $currentStoreDataProduct->toArray();
Но выдает ошибку, что json_decode ожидает строку, но получает массив.
Во-вторых, я пытаюсь чтобы получить свойство продукта и поместить его в массив где-то еще в моем приложении, но выдает ту же ошибку.
'default_image' => $currentStoreDataProduct->default_image,
Будем благодарны за любую помощь в решении этой проблемы.
dd модели->getAttributes:
array:33 [
"store_data_product_id" => 12204
"website_id" => 5
"store_view_id" => 13
"store_data_brand_id" => null
"store_data_supplier_id" => null
"external_product_id" => 70432304
"external_variant_id" => 139154696
"name" => "ONE + Kreissäge 150mm RWSL1801M *Body only*"
"name_long" => "ONE + Kreissäge 150mm RWSL1801M *Body only*"
"name_variant" => "Default"
"description" => "ONE + Circular saw 150mm RWSL1801M *Body only*. Ideal for sawing panels, chipboards, laminated boards and wood materials. The integrated laser ensures more exact longitudinal cuts. The thin carbide saw blade ensures less resistance during sawing and a longer service life of the hand-held circular saw."
"content" => """
*Body only*
\r\n
Ideal for sawing panels, chipboards, laminated boards and wood materials. The integrated laser ensures more exact longitudinal cuts. The thin carbide saw blade ensures less resistance during sawing and a longer service life of the hand-held circular saw. One Plus is the most flexible battery tool system in the world, allowing you to use 29 different cordless power tools and 7 different garden tools with just one battery and charger. The flexibility of One Plus means for you that you can put together your own cordless tool system, entirely to your wishes, how and when you want. Invest once in a battery and charger, choose the tools you need and you can use all the tools with this one battery. You save money because you do not have to buy a battery and charger with every new tool!
\r\n
Highlights & Details\r\n
- \r\n
- Micro softgrip\r\n
- Laser for more exact longitudinal cuts\r\n
Performance\r\n
- \r\n
- Laser for more exact longitudinal cuts\r\n
- Cutting capacity of 45 mm at 90 °\r\n
- Miter adjustment up to 50 °\r\n
- Thin hard metal saw blade (1.5 mm)\r\n
- Spindle lock for simple saw blade change\r\n
- Micro softgrip.\r\n
Delivery\r\n
- \r\n
- Tungsten carbide saw blade Z 18 Ø 150 mm\r\n
- Parallel stop\r\n
- Allen key.\r\n
"url" => "one-cirkelzaag-150mm-70432304"
"default_image" => "{"src":"https:\/\/cdn.webshopapp.com\/shops\/38604\/files\/193397588\/file.jpg","thumb":"https:\/\/cdn.webshopapp.com\/shops\/38604\/files\/193397588\/50x50x2\/file.jpg"}"
"images" => "{"171826733":{"src":"https:\/\/cdn.webshopapp.com\/shops\/38604\/files\/193397597\/file.jpg","thumb":"https:\/\/cdn.webshopapp.com\/shops\/38604\/files\/193397597\/50x50x2\/file.jpg"},"171826727":{"src":"https:\/\/cdn.webshopapp.com\/shops\/38604\/files\/193397594\/file.jpg","thumb":"https:\/\/cdn.webshopapp.com\/shops\/38604\/files\/193397594\/50x50x2\/file.jpg"},"171826721":{"src":"https:\/\/cdn.webshopapp.com\/shops\/38604\/files\/193397588\/file.jpg","thumb":"https:\/\/cdn.webshopapp.com\/shops\/38604\/files\/193397588\/50x50x2\/file.jpg"},"171826712":{"src":"https:\/\/cdn.webshopapp.com\/shops\/38604\/files\/193397576\/file.jpg","thumb":"https:\/\/cdn.webshopapp.com\/shops\/38604\/files\/193397576\/50x50x2\/file.jpg"},"171826709":{"src":"https:\/\/cdn.webshopapp.com\/shops\/38604\/files\/193397567\/file.jpg","thumb":"https:\/\/cdn.webshopapp.com\/shops\/38604\/files\/193397567\/50x50x2\/file.jpg"}}"
"meta_fields" => null
"article_code" => "140-0075"
"sku" => "5133001164"
"ean" => "4892210118554"
"cost_price_excl" => "58.82"
"price_excl" => "78.4298"
"special_price_excl" => "0"
"vat_rate" => "1.21"
"is_default" => true
"sort_order" => 1
"visibility" => "visible"
"stock_level" => 998
"stock_sold" => 1
"stock_status" => "enabled"
"weight" => 0
"settings" => "{"has_been_salable":1,"last_date_salable":{"date":"2018-05-14 08:44:30.884906","timezone_type":3,"timezone":"Europe\/Amsterdam"},"fiction_margin":0}"
"created_at" => "2018-05-12 00:06:07"
"updated_at" => "2018-05-14 10:06:07"
]
Часть зарегистрированной ошибки:
[2018-05-14 10:15:22] local.ERROR: json_decode() expects parameter 1 to be string, array given {"exception":"[object] (ErrorException(code: 0): json_decode() expects parameter 1 to be string, array given at /vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php:682)
[stacktrace]
#0 [internal function]: Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError(2, 'json_decode() e...', '/var/www/domain...', 682, Array)
#1 /vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php(682): json_decode(Array, true)
#2 /vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php(491): Illuminate\\Database\\Eloquent\\Model->fromJson(Array)
#3 /vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php(182): Illuminate\\Database\\Eloquent\\Model->castAttribute('default_image', Array)
#4 /vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php(102): Illuminate\\Database\\Eloquent\\Model->addCastAttributesToArray(Array, Array)
#5 /vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(972): Illuminate\\Database\\Eloquent\\Model->attributesToArray()
Подробнее здесь: https://stackoverflow.com/questions/503 ... g-properly
Мобильная версия