Php 使用Laravel模型保存多级阵列

Php 使用Laravel模型保存多级阵列,php,laravel,eloquent,laravel-7,Php,Laravel,Eloquent,Laravel 7,我无法使用Laravel-7模型保存此数据 这是我的数据 $supplier=[ “名称”=>“供应商1”, '图片'=>[ [ 'name'=>'PIC 1', “电话号码”=>[ ['number'=>'111111'], ['number'=>'123456'] ] ], [ 'name'=>'PIC 2', “电话号码”=>[ ['number'=>'222222'] ] ] ] ]; 这是我的模型 Supplier.php //Supplier.php 公共功能供应商_pic() {

我无法使用Laravel-7模型保存此数据

这是我的数据

$supplier=[
“名称”=>“供应商1”,
'图片'=>[
[
'name'=>'PIC 1',
“电话号码”=>[
['number'=>'111111'],
['number'=>'123456']
]
],
[
'name'=>'PIC 2',
“电话号码”=>[
['number'=>'222222']
]
]
]
];
这是我的模型
Supplier.php

//Supplier.php
公共功能供应商_pic()
{
返回$this->hasMany('SupplierPIC');
}
还有其他的型号

//SupplierPIC.php
公共功能供应商()
{
返回$this->belongsTo('Supplier');
}
公共功能picu电话号码()
{
返回$this->hasMany('SupplierPICPhoneNumber');
}
//SupplierPICPhoneNumber.php
公共功能供应商_pic()
{
返回$this->belongsTo('SupplierPIC');
}
如何在控制器上保存这些数据?
谢谢你

你只需要把它分解成它的组成对象

在您的例子中,它是一个
供应商
对象和两个
供应商
对象,每个对象都有一个
供应商电话号码

  • 创建供应商
  • 创建供应商PIC

  • 建议

    • 你的关系命名没有遵循最佳实践,这有点令人困惑。试着用复数来命名那些使用
      有很多
      类型关系的事物(即
      pic\u电话号码
      而不是
      pic\u电话号码
    • 供应商PicphoneNumber
      是否需要完整的型号?json列可能更合适

    您只需将其分解为组成对象

    在您的例子中,它是一个
    供应商
    对象和两个
    供应商
    对象,每个对象都有一个
    供应商电话号码

  • 创建供应商
  • 创建供应商PIC

  • 建议

    • 你的关系命名没有遵循最佳实践,这有点令人困惑。试着用复数来命名那些使用
      有很多
      类型关系的事物(即
      pic\u电话号码
      而不是
      pic\u电话号码
    • 供应商PicphoneNumber
      是否需要完整的型号?json列可能更合适

    哇,谢谢,非常有用,谢谢你的建议哇,谢谢,非常有用,谢谢你的建议
    $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);
        });
    });