【问题标题】:Laravel duplicate all fields of form using blade and insert multiple rows from a single query using eloquentLaravel 使用刀片复制表单的所有字段,并使用 eloquent 从单个查询中插入多行
【发布时间】:2018-08-26 19:49:13
【问题描述】:

我想要一个添加另一个表单按钮,该按钮将复制我表单的所有字段,但仍将保留一个提交按钮并将其所有数据传递到控制器以使用单个查询插入它。

这是打开表单的create.blade.php

@extends('encoder-dashboard.layouts.app')

@section('css')
  <link rel="stylesheet" href="/css/datepicker.css">
@endsection

@section('content')
    <section class="content-header">
        <h1>
            Add New Analysis Request
        </h1>
    </section>
    <div class="content">
        @include('adminlte-templates::common.errors')
        <div class="box box-primary">

            <div class="box-body">
                <div class="row">
                    {!! Form::open(['route' => 'encoder.analysis-request.store']) !!}

                        @include('encoder-dashboard.analysis-request.fields')

                    {!! Form::close() !!}
                </div>
            </div>
        </div>
    </div>
@endsection

@section('scripts')
  <script src="/js/datepicker.js"></script>

  <script>
  $('#datepicker').datepicker({
      autoclose: true
    });
  </script>
@endsection

以下是 fields.blade.php

中列出的字段
<!-- Client Id Field -->
<div class="form-group col-sm-6">
    {!! Form::label('client_id', 'Client Name:') !!}
     {!! Form::select('client_id[]', $client, null, ['class' => 'form-control','required'])!!}
</div>

<!-- Password Field -->
<div class="form-group col-sm-6">
    {!! Form::label('sample_code', 'Sample Code:') !!}
    {!! Form::text('sample_code[]', null, ['class' => 'form-control','required']) !!}
</div>

<!-- Password Field -->
<div class="form-group col-sm-6">
    {!! Form::label('sample_description', 'Description:') !!}
    {!! Form::text('sample_description[]', null, ['class' => 'form-control','required']) !!}
</div>

<!-- Password Field -->
<div class="form-group col-sm-6">
    {!! Form::label('quantity', 'Quantity:') !!}
    {!! Form::number('quantity[]', null, ['class' => 'form-control','required']) !!}
</div>

<!-- Password Field -->
<div class="form-group col-sm-6">
    {!! Form::label('analysis_requested', 'Analysis Request:') !!}
    {!! Form::text('analysis_requested[]', null, ['class' => 'form-control','required']) !!}
</div>

<!-- Password Field -->
<div class="form-group col-sm-6">
    {!! Form::label('special_instruction', 'Special Instruction:') !!}
    {!! Form::text('special_instruction[]', null, ['class' => 'form-control','required']) !!}
</div>

<!-- Submit Field -->
<div class="form-group col-sm-12">
    {!! Form::submit('Save', ['class' => 'btn btn-success', 'onClick' => 'this.form.submit(); this.disabled=true; this.value="Saving…";']) !!}
    <a href="{!! route('encoder.analysis-request.index') !!}" class="btn btn-default">Cancel</a>
</div>

表单上面的所有字段都将被复制并作为数组传递,对吗?我应该如何使用 jQuery 或简单的 vanila JS 来做到这一点?

如果我传递这些数据,它会看起来像这样。

array:8 [▼
  "_token" => "xEGtr4h0f4gim0sLvABZivvq36UNaRHWJ08PMWTI"
  "client_id" => array:1 [▼
    0 => "1"
  ]
  "sample_code" => array:1 [▼
    0 => "eqwewqeqewqrwereqwe"
  ]
  "sample_description" => array:1 [▼
    0 => "dasdsadsadsadasd"
  ]
  "quantity" => array:1 [▼
    0 => "232"
  ]
  "analysis_requested" => array:1 [▼
    0 => "dsadsadsadsadsad"
  ]
  "special_instruction" => array:1 [▼
    0 => "dwqewqewqewqewqeq"
  ]
]

这是我插入一条记录时的以下查询。

$analysis_request = $this->analysisrequestRepository->create([
            'client_id' => $input['client_id'],
            'sample_code' => $input['sample_code'],
            'sample_description' => $input['sample_description'],
            'quantity' => $input['quantity'],
            'analysis_requested' => $input['analysis_requested'],
            'special_instruction' => $input['special_instruction'],
            'status' => 'for_testing'
        ]);

        $id = $analysis_request->id;

        $request_actors = RequestActors::create([
            'request_id' => $id,
            'encoder_id' => Auth::guard('encoder')->user()->id,
            'microbiologist_id' => null
        ]);

这是我上面插入一条记录的查询。我还执行了另一个查询来插入请求的 id,该请求与插入在第一个查询中的分析请求有关系。

现在,如果我要插入很多,我会在一个数组中创建一个数组并将其插入每条记录,对吗?像这样。

$data = array(
        array(
            'client_id' => $input['client_id'],
            'sample_code' => $input['sample_code'],
            'sample_description' => $input['sample_description'],
            'quantity' => $input['quantity'],
            'analysis_requested' => $input['analysis_requested'],
            'special_instruction' => $input['special_instruction'],
            'status' => 'for_testing'
        ),
        // and so on.
    );

        AnalysisRequest::insert($data);

但我在上面的代码中有一个错误,它说 数组到字符串的转换

或者如果我为每个都做一个会更好吗?

我在这里唯一的目标是根据要添加的条目执行插入许多查询。

感谢有人可以提供帮助。 提前致谢。

【问题讨论】:

    标签: php laravel laravel-5 laravel-5.5 bulkinsert


    【解决方案1】:

    您正在获取一个数组数组,并且您希望将(例如)放入client_id 一个数组[1]
    因此,您有“数组到字符串的转换”。
    你可以这样做

    $data = array(
        array(
            'client_id' => $input['client_id'][0],
            'sample_code' => $input['sample_code'][0],
            'sample_description' => $input['sample_description'][0],
            'quantity' => $input['quantity'][0],
            'analysis_requested' => $input['analysis_requested'][0],
            'special_instruction' => $input['special_instruction'][0],
            'status' => 'for_testing'
        ),
        // and so on.
    );
    
    AnalysisRequest::insert($data);
    

    【讨论】:

    • 哦,我忘了包括它,这就是原因。洛尔没看到。顺便说一句,我将如何获取每个插入查询的最后一个 id?因为我必须在我的请求参与者表中执行另一个插入查询。
    • 你能更好地解释一下你的新问题吗?
    • 我想根据表单中的条目数进行多次插入。例如,我将使用一个提交按钮复制表单中的所有字段。期望我将传递一个数组,而我的目标是进行多次插入批量。那么我将如何处理数组?我会做一个foreach吗?要不然是啥。我还需要获取我插入的每条记录的最后一个 id。
    • 我不确定您的代码是否代表您想要做的事情。但是在 Laravel 中你可以插入多个 $data foreach($datas as $data) { AnalysisRequest::create($data); }
    • 这是我的新问题stackoverflow.com/questions/49348153/… 也许它可以帮助解释
    猜你喜欢
    • 2015-06-25
    • 2015-08-06
    • 2016-10-02
    • 2021-12-12
    • 2011-08-01
    • 2013-05-08
    • 2019-07-21
    • 2015-08-25
    • 2016-08-04
    相关资源
    最近更新 更多