I am trying to insert null into my kisi_id table using update method and I am getting an error like this
SQLSTATE[HY000]: General error: 1366 Incorrect integer value: 'Null' for column.
When i change value=0 getting error like
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row.
Kisiler Migration
public function up()
{
Schema::create('kisilers', function (Blueprint $table) {
$table->id();
$table->string ('ad_soyad',100);
$table->enum('kadro',['İdari','Anaokulu','İlköğretim','Lise','Destek','Yönetim']);
$table->string ('birim_zumre');
$table->timestamps();
});
}
Envanter Migration
public function up()
{
Schema::create('envanters', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('kisi_id')->default(null)->nullable();
$table->string('urun_cesidi');
$table->string('urun_marka');
$table->string('urun_model');
$table->string('urun_ozellik')->nullable();
$table->string('seri_no')->nullable();
$table->enum('okul',['İdari','Lise','İlköğretim','Anaokulu','Yönetim','Destek']);
$table->timestamps();
$table->foreign('kisi_id')->nullable()->references('id')->on('kisilers')->onDelete('set null');
});
}
Resource Controller
public function update(ZimmetUpdateRequest $request, $id)
{
$envanter =Envanter::find($id) ?? abort(404,'Ürün Bulunamadı');
Envanter::where('id',$id)->update($request->except(['urun_cesidi','urun_marka','urun_model','urun_ozellik','seri_no','_method','_token']));
return redirect()->route('envanter.index',$id)->withSuccess('Zimmetten Çıkarma İşlemi Başarılı.');
}
Envanter Model
use HasFactory;
protected $nullable;
protected $fillable=['urun_cesidi','urun_marka','urun_model','urun_ozellik','kisi_id','okul','seri_no'];
public function kisiler(){
return $this->belongsTo('App\Models\Kisiler','id');
}
Kisiler Model
use HasFactory;
protected $fillable=['ad_soyad','kadro','birim_zumre'];
public function envanter(){
return $this->hasMany('App\Models\Envanter','kisi_id');
}
blade.php
<div ><form method="POST" action="{{route('zimmetsil.update',$envantergoster->id)}}">
@csrf
@method('PUT')
<button type="submit" name='kisi_id' value=0 >Unassigned</button></form>
</div>
CodePudding user response:
use this code to migration:
->onDelete('cascade');
CodePudding user response:
you don't have to do
->default(null)
on your migration. just
->nullable()
will work. please try this way.
and you are getting
value=0
error because your "kisi_id" references "kisilers" but there is no record with id=0
and lastly,
$envanter =Envanter::find($id) ?? abort(404,'Ürün Bulunamadı');
dont do this. replace it with
$envanter =Envanter::findOrFail($id);
EDIT:
change this:
Envanter::where('id',$id)->update($request->except(['urun_cesidi','urun_marka','urun_model','urun_ozellik','seri_no','_method','_token']));
return redirect()->route('envanter.index',$id)->withSuccess('Zimmetten Çıkarma İşlemi Başarılı.');
to this:
$envanter->update($request->except(['urun_cesidi','urun_marka','urun_model','urun_ozellik','seri_no','_method','_token']));
return redirect()->route('envanter.index',$id)->withSuccess('Zimmetten Çıkarma İşlemi Başarılı.');
