【问题标题】:How to insert array in multiple rows in laravel如何在laravel中将数组插入多行
【发布时间】:2020-04-08 10:26:19
【问题描述】:

嗨,我需要在表中插入一个数组,但我不知道该怎么做 我正在使用 select2 插件选择多个值作为标签并将它们作为数组插入数据库 输入看起来像这样

<select name="designation[]" class="form-control" multiple="multiple" id="select2"></select>
//script
$('#select2').select2({
        tags: true,
        tokenSeparators: [',', ' '],
        selectOnClose: true
        });

事件控制器

public function store(Request $request){
        $validator = $request->validate([
            'theme' => ['required','unique:events,theme'],
        ]);
        $event = Event::create($request->except('designation'));
        $event->montant()->insert($request->get('designation'));


        return redirect()->to(route('admin.event.index'))
        ->withFlashSuccess('L\'éventment a bien etait ajouté');
    }

当我提交表单时使用此代码出现此错误 SQLSTATE [42S22]:未找到列:1054“字段列表”中的未知列“0”(SQL:插入event_montants01)值(222、111)) event_montant 迁移

public function up()
    {
        Schema::create('event_montants', function (Blueprint $table) {
            $table->increments('id');
            $table->bigInteger('designation');
            $table->unsignedInteger('event_id');
            $table->foreign('event_id')->references('id')->on('events')
            ->onDelete('cascade');
            $table->timestamps();
        });
    }

请帮我解决这个问题

【问题讨论】:

  • insert 期待一个关联数组,其中键是字段名称,您传递的是一个零索引数组,因此它认为您的字段被命名为 0 和 1 ...不确定您是哪个字段正在尝试保存或为什么要尝试将数组放在单个字段中
  • 是的,我知道,但是如何将键名从 0 和 1 更改为“指定”?或将此数组转换为关联数组,因为当我调试 $request->get('designation') 它给了我这个数组:2 [▼ 0 => "222" 1 => "111" ] 对不起我的英语

标签: arrays laravel eloquent tags jquery-select2


【解决方案1】:

您可以将包含大量关联数组的数组传递给insert 以插入多条记录。您将需要这些关联数组与您想要的字段的键。你可以得到你的输入,它是一个数组,并根据需要将其映射以添加以字段作为键的最终结果:

$data = array_map(function ($var) use ($event) {
    return [
        'designation' => $var,
        'event_id' => $event->id,
    ];
}, $request->input('designation', []));

$event->montant()->insert($data);

尽管您可能只想遍历输入数组并调用 create 而不是 insert 以不绕过模型并触发您的时间戳和模型事件。

【讨论】:

    【解决方案2】:

    或者你可以对关系使用保存方法。

    类似这样的:

    $montants = $request->get('designation');
    
    foreach($montants as $value) {
        $montant = new App\Montant(['designation' => $value, 'event_id' => $event_id]);
    
    $event->montant()->save($montant);
    }
    

    【讨论】:

      【解决方案3】:

      感谢大家的帮助,我刚刚解决了控制器中这段代码的问题

      public function store(Request $request){
              $validator = $request->validate([
                  'theme' => ['required','unique:events,theme'],
              ]);
              $array_request = $request->get('designation');
              $array = array_chunk($array_request,1);
      
              $designation = array();
              foreach($array as $k => $v){
                  $designation[$k]['designation'] = $v[0];
               }
      
              $event = Event::create($request->except('designation'));
              $event->montant()->createMany($designation);
              return redirect()->to(route('admin.event.index'))
              ->withFlashSuccess('L\'éventment a bien etait ajouté');
          }
      

      【讨论】:

        猜你喜欢
        • 2021-12-12
        • 2020-11-20
        • 2019-05-09
        • 2018-05-18
        • 1970-01-01
        • 2020-05-01
        • 2018-12-09
        • 2020-08-10
        • 2016-07-29
        相关资源
        最近更新 更多