常规错误:1364字段没有默认值

时间:2019-07-14 23:20:41

标签: jquery laravel

我想在“ pointages”表中插入以下数据元素:矩阵,datep,余额,nbrj高级工作和站点,但这给了我以下错误:

  

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

这是我的代码:

SalarieController

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();
        });

2 个答案:

答案 0 :(得分:2)

要检查的事物。在您的积分模型上,确保将matricule设置为可填充:

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

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

要检查的另一件事是您的中间件在此特定路由上正在做什么。在您的Kernal.php中,Laravel默认具有使空字符串为空的中间件。因此,如果您的用户未在表单的matricule字段中键入任何内容-如果此中间件到位,它将使其为null。

寻找这个:

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

如果在其中,请将其删除(以进行测试)。如果该代码现在可以正常工作,则说明问题出在哪里。

答案 1 :(得分:1)

您将需要在模型上指定可填充受保护的属性,因为默认情况下,所有Eloquent模型都可以防止大规模分配。

您可以指定在模型中可以批量分配的字段,可以通过在模型中添加特殊变量$fillable来实现。

app / pointages.php

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

更多详细信息:Laravel(Link)中的“质量分配”是什么意思