【问题标题】:Save multi-level array using Laravel Model使用 Laravel 模型保存多级数组
【发布时间】: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');
    }

如何将这些数据保存在控制器上? 谢谢

【问题讨论】:

    标签: php laravel eloquent laravel-7


    【解决方案1】:

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

    在您的情况下,它是一个 Supplier 对象和两个 SupplierPIC 对象,每个对象都有一个 SupplierPICPhoneNumber

    1. 创建供应商
    $supplier = Supplier::firstOrCreate([
       'name' => 'Supplier 1'
    ]);
    
    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 列可能更适合。

    【讨论】:

    • 哇,谢谢,非常有帮助,感谢您的建议
    猜你喜欢
    • 1970-01-01
    • 2021-02-07
    • 2021-12-31
    • 2014-01-27
    • 1970-01-01
    • 2017-11-21
    • 2014-05-02
    • 1970-01-01
    • 2016-01-23
    相关资源
    最近更新 更多