我想在“ 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();
});
答案 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)中的“质量分配”是什么意思