【问题标题】:General error: 1364 Field doesn't have a default value一般错误:1364 字段没有默认值
【发布时间】:2019-11-23 16:33:48
【问题描述】:

我想在我的“积分”表中插入以下数据元素:矩阵、日期p、余额、nbrj 高级作品和网站,但它给了我以下错误:

一般错误:1364 字段“矩阵”没有默认值

这是我的代码:

工资控制员

public function addMultiple(Request $request){
           foreach($request->get('items') as $item){
              $pointage = Pointage::create([
             'matricule' => $item['matricule'], 
              'datep' => $item['date'],
             'solde' => $item['salaire'], 
             'nbrj' => $item['nbrj'], 
             'prime' => $item['prime'], 
             'ouvrage' => $item['ouvrage'], 
             'chantier' => $item['chantier']
             ]);
            }
              return redirect("mois");
          }

jQuery 代码

  $('.add-all').on('click', function() {
        var items = [];
        let valu = $('#datePicker').val();
       let valu1 = $('#chan option:selected').html();
       let valu2 = $('#ouv option:selected').html();
       ///


      $("tr").each(function(i,r){
        if ( i > 0 && $(r).find("input").first().prop("checked"))
        {  

         // let value = $('#nbr').val();
         let value = parseInt($(r.cells[6]).find('input').val());
          let prime = parseInt($(r.cells[7]).find('input').val());
          let sum = (((parseInt($(r.cells[5]).text()))/24) * value ) + prime;
          $(r).find("input").first().replaceWith('<span style="color: green;font-weight: bolder;">✔</span>');//✓ -

          //items.push({value,prime,sum});
         items.push({"matricule": r.cells[3].innerText,"date" : valu, "salaire": sum, "nbrj" : value , "chantier" : valu1 , "ouvrage" : valu2 , "prime": prime })
              }
             // console.log(items);
                                    });
//ajax 
 $.ajax({ 
         method      : 'POST', 
         url       : 'mois', 
         headers: {
             'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
         },
         data      : {"items":items}, // pass in json format 
         success   : function(data) {
             console.log(data);
         },
         error : function(err){
             console.log(err)
         }
     });

//fin ajax 
      });  

mois.blade.php

<div id='form1'>
    @if ($message = Session::get('success'))
    <div class="alert alert-success">
        <p>{{ $message }}</p>
    </div>
    @endif

     {!! csrf_field() !!}

    <div class="form-group">
     <label>Date:</label>
      <input type="date" id="datePicker" name="date" class="form-control" placeholder="date naissance">
    </div>

    <div class="form-group">
      <label>Select Chantier:</label>
      {!! Form::select('chantier_id',[''=>'--- Select Chantier ---']+$chantiers,null,array('class' => 'form-control','id' => 'chan')) !!}
    </div>

    <div class="form-group">
      <label>Select Ouvrage:</label>
      {!! Form::select('ouvrage_id',[''=>'--- Select Ouvrage ---'],null,array('class' => 'form-control','id' => 'ouv')) !!}
    </div>

    <div class="form-group">
      <label>Nbre de jour</label>
        <input type="text" name="nbr" id='nbr' class="form-control" placeholder="nbre de jour" value="1">
      <span id='error'>Input can not blank</span>
    </div>

    <div class="form-group col-md-offset-5 ">
      <button class="btn btn-success " type="submit" id="hide">valider</button>
    </div>

  </div>

 <div id='form2'>
    <h3>form group 2</h3>
    <h4>DATE : <span id="dateE"></span></h4>
    <h4>chantier : <span id="ch"></span></h4>
    <h4>ouvrage : <span id="ou"></span></h4>
      <div class="form-group col-md-offset-5 ">
        <button class="btn btn-success add-all" type="submit" id="hide">Pointage</button>
      </div>
   <table class="table table-bordered" id="mytable">
        <tr>
            <th>Archive</th>
            <th><input type="checkbox" id="check_all"></th>
            <th>S.No.</th>
            <th>matricule</th>
            <th>nom & prenom</th>
            <th>salaire net</th>
            <th>nbre de jour </th>
            <th>prime</th>
        </tr>
        @if($salaries->count())
            @foreach($salaries as $key => $salarie)
                <tr id="tr_{{$salarie->id}}">
                  <td>archive</td>
                  <td><input type="checkbox" class="checkbox" data-id="{{$salarie->id}}"></td>
                  <td>{{ ++$key }}</td>
                  <td>{{ $salarie->matricule }}</td>
                  <td >{{ $salarie->nom }} {{ $salarie->prenom }}</td>
                  <td><input type="hidden" name="salaire" value="{{ $salarie->salairenet }}">{{ $salarie->salairenet }}</td>
                  <td ><input type="text" class='input2' name="nbreJ" class="form-control" ></td>
                  <td><input type="text" name="prime" class="form-control" value="0"></td>
                </tr>
            @endforeach
        @endif
    </table>
 </div>
<!--</form>-->
</div>

迁移 create_pointages_table.php

 Schema::create('pointages', function (Blueprint $table) {
            $table->increments('id'); 
            $table->string('matricule'); 
            $table->date('datep');
            $table->double('nbrj');
            $table->double('prime')->nullable();
            $table->double('solde');
            $table->string('ouvrage'); 
            $table->string('chantier'); 

            $table->timestamps();
        });

【问题讨论】:

    标签: jquery laravel


    【解决方案1】:

    要检查的几件事。在您的 Pointages 模型上,确保您已将 matricule 设置为可填充:

    protected $fillable = [
        'matricule', 'otherVars',
    ];
    

    如果它在模型上不可填充,无论你填写什么,Laravel 都会向数据库返回一个空值。由于数据库字段 'matricule' 在你的代码中不可为空,这可能是错误。

    要检查的另一件事是您的中间件为这条特定路线做了什么。在你的 Kernal.php 中,Laravel 默认有一个使空字符串为空的中间件。因此,如果您的用户没有在表单上的matricule 字段中输入任何内容——如果这个中间件就位,它将使其为空。

    寻找这个:

    protected $middleware = [
        // OtherMiddleware
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    ];
    

    如果存在,请将其删除(用于测试)。如果代码现在可以工作,您就知道问题所在了。

    【讨论】:

      【解决方案2】:

      您需要在模型上指定 fillableguarded 属性,因为所有 Eloquent 模型都默认防止批量赋值。

      Fillable 您可以指定模型中哪些字段可批量赋值,您可以通过将特殊变量 $fillable 添加到模型中来做到这一点。

      app/pointages.php

      class pointages extends Model {
            protected $fillable = ['matricule']; 
            //only the field names inside the array can be mass-assign
      }
      

      更多细节:Laravel 中的“Mass Assignment”是什么意思 (Link)

      【讨论】:

        猜你喜欢
        • 2021-02-28
        • 2021-10-13
        • 2017-03-02
        • 2020-02-03
        • 2020-02-27
        • 2020-07-23
        • 2016-06-13
        • 2021-01-18
        • 2021-07-30
        相关资源
        最近更新 更多