使用 Laravel 模型保存多级数组
Posted
技术标签:
【中文标题】使用 Laravel 模型保存多级数组【英文标题】:Save multi-level array using Laravel Model 【发布时间】:2020-10-23 21:55:41 【问题描述】:我无法使用 Laravel-7 模型保存这些数据
这是我的数据
$supplier = [
'name' => 'Supplier 1',
'pic' => [
[
'name' => 'PIC 1',
'phone_number' => [
['number' => '111111'],
['number' => '123456']
]
],
[
'name' => 'PIC 2',
'phone_number' => [
['number' => '222222']
]
]
]
];
这是我的模型
Supplier.php
// Supplier.php
public function supplier_pic()
return $this->hasMany('SupplierPIC');
和其他型号
// SupplierPIC.php
public function supplier()
return $this->belongsTo('Supplier');
public function pic_phone_number()
return $this->hasMany('SupplierPICPhoneNumber');
// SupplierPICPhoneNumber.php
public function supplier_pic()
return $this->belongsTo('SupplierPIC');
如何将这些数据保存在控制器上? 谢谢
【问题讨论】:
【参考方案1】:你只需要把它分解成它的组成对象。
在您的情况下,它是一个 Supplier
对象和两个 SupplierPIC
对象,每个对象都有一个 SupplierPICPhoneNumber
-
创建供应商
$supplier = Supplier::firstOrCreate([
'name' => 'Supplier 1'
]);
-
创建供应商图片
collect($data['pics'])->each(function ($pic) use ($supplier)
// Create the PIC
$x = SupplierPIC::create([
'name' => $pic['name']
]);
// Attach it to the supplier
$supplier->supplier_pic()->save($x);
// Attach phone numbers
collect($pic['phone_number'])->each(function ($number) use ($x)
// Create the PIC Phone number
$y = SupplierPICPhoneNumber::create([
'number' => $pic['number']
]);
// Attach the number to the PIC
$x->pic_phone_number()->save($y);
);
);
建议
关系的命名不遵循最佳实践,这有点令人困惑。尝试使用带有复数形式的hasMany
类型关系命名事物(即 pic_phone_numbers
而不是 pic_phone_number
)
您需要SupplierPICPhoneNumber
的完整模型吗? json 列可能更适合。
【讨论】:
哇,谢谢,非常有帮助,感谢您的建议以上是关于使用 Laravel 模型保存多级数组的主要内容,如果未能解决你的问题,请参考以下文章
将数组从 AuthController 传递到 Laravel 5 中的登录视图