Modele şunu ekliyorsunuz
protected $casts = [
'malzemeler' => 'array',
];
Bu şekilde malzemeler alanı modele dizi olarak verildiğinde tabloya JSON olarak kaydedilecek, tablodan çekilirken otomatik diziye dönüştürülecek:
$malzemeler = [
'boya' => [
'renk' => 'Kırmızı',
'nitelik' => 'Sulu Boya'
],
'kalem' => [
'renk' => 'Mavi',
'nitelik' => 'Tükenmez Kalem'
]
];
Model::create([
'name' => 'Örnek',
'malzemeler' => $malzemeler
]);
+----+-------+--------------------------------------------------------------------------------------------------------------------------+
| id | name | malzemeler |
+----+-------+--------------------------------------------------------------------------------------------------------------------------+
| 1 | Örnek | {"boya":{"renk":"K\u0131rm\u0131z\u0131","nitelik":"Sulu Boya"},"kalem":{"renk":"Mavi","nitelik":"T\u00fckenmez Kalem"}} |
+----+-------+--------------------------------------------------------------------------------------------------------------------------+
getMalzemelerAttribute şeklinde kullandığınız ise Accessor diye geçmekte. Hepsi bu sayfada:
https://laravel.com/docs/5.7/eloquent-mutators