talhaguney45 Tahmin ettiğim gibi bu tablo yapısı uygun değil. Size önerim envanter mantığı ile hareket etmeniz. Mesela (tüm bilgileri yazmıyorum, örnek vermek amacıyla kısa geçiyorum)
Schema::create('araclar', function (Blueprint $table) {
$table->id();
$table->boolean('cekici_mi');
$table->string('plaka')->index();
$table->string('sase')->unique();
$table->timestamps();
});
Schema::create('islemler', function (Blueprint $table) {
$table->id();
$table->string('yapilan_islem');
$table->timestamps();
});
Schema::create('islem_arac', function (Blueprint $table) {
$table->foreignId('islem_id')->constrained('islemler')->cascadeOnDelete();
$table->foreignId('arac_id')->constrained('araclar')->cascadeOnDelete();
$table->boolean('cekici_mi');
$table->unique(['islem_id', 'arac_id']);
});
app/Models/Islem.php
public function tumAraclar(): BelongsToMany
{
return $this->belongsToMany(Arac::class, 'islem_arac', 'islem_id', 'arac_id');
}
public function araclar(): BelongsToMany
{
return $this->belongsToMany(Arac::class, 'islem_arac', 'islem_id', 'arac_id')
->wherePivot('cekici_mi', false);
}
public function cekiciler(): BelongsToMany
{
return $this->belongsToMany(Arac::class, 'islem_arac', 'islem_id', 'arac_id')
->wherePivot('cekici_mi', true);
}
public function aracYadaCekiciEkle(Arac|iterable $araclar): bool
{
if($araclar instanceof Arac) {
$this->tumAraclar()
->attach($araclar, [
'cekici_mi' => $araclar->cekici_mi,
]);
return true;
}
$compiled = [];
foreach($araclar as $arac) {
$compiled[$arac->id] = [
'cekici_mi' => $arac->cekici_mi,
];
}
$this->tumAraclar()
->attach($compiled);
return true;
}
app/Models/Arac.php
public function aracIslemleri(): BelongsToMany
{
return $this->belongsToMany(Islem::class, 'islem_arac', 'arac_id'. 'islem_id')
->wherePivot('cekici_mi', false);
}
public function cekiciIslemleri(): BelongsToMany
{
return $this->belongsToMany(Islem::class, 'islem_arac', 'arac_id', 'islem_id')
->wherePivot('cekici_mi', true);
}
$arac = Arac::create([
'plaka' => '34ABC123',
'sase' => '1GCJK33104F173427',
'cekici_mi' => false,
]);
$cekici = Arac::create([
'plaka' => '34CDE456',
'sase' => 'JNKCA21A4XT770979',
'cekici_mi' => true,
]);
$islem = Islem::create([
'yapilan_islem' => 'Yanlış yere parkedildiği için çekildi.'
]);
$islem->aracYadaCekiciEkle([$arac, $cekici]);
$islem = Islem::find(1);
// İşleme karışan çekiciler
$cekiciler = $islem->cekiciler;
// Çekilen araçlar
$araclar = $islem->araclar;
// Yeni araç ekle
$yeniArac = Arac::create([
'plaka' => '34EFG789',
'sase' => '1D4GP24R57B255713',
'cekici_mi' => false,
]);
// Eski araçları kaldır
$islem->araclar()
->detach();
// Yeni aracı ekle
$islem->aracYadaCekiciEkle($yeniArac);
// Yeni araç ekle
$baskaBirArac = Arac::create([
'plaka' => '34AB321',
'sase' => 'JH4DA9340PS000417',
'cekici_mi' => false,
]);
// Eski araçları ellemeden ekleme yap
$islem->aracYadaCekiciEkle($baskaBirArac);
// Çekicileri sil
$islem->cekiciler()
->detach();
$yeniCekici = Arac::create([
'plaka' => '34GG121',
'sase' => 'JKBVNKD167A013982',
'cekici_mi' => true,
]);
// Yeni çekici ekle
$islem->aracYadaCekiciEkle($yeniCekici);
return $islem;
{
"id": 1,
"yapilan_islem": "Yanlış yere parkedildiği için çekildi.",
"created_at": "2022-06-02T23:47:16.000000Z",
"updated_at": "2022-06-02T23:47:16.000000Z",
"cekiciler": [
{
"id": 5,
"cekici_mi": 1,
"plaka": "34GG121",
"sase": "JKBVNKD167A013982",
"created_at": "2022-06-02T23:47:18.000000Z",
"updated_at": "2022-06-02T23:47:18.000000Z",
"pivot": {
"islem_id": 1,
"arac_id": 5
}
}
],
"araclar": [
{
"id": 3,
"cekici_mi": 0,
"plaka": "34EFG789",
"sase": "1D4GP24R57B255713",
"created_at": "2022-06-02T23:47:18.000000Z",
"updated_at": "2022-06-02T23:47:18.000000Z",
"pivot": {
"islem_id": 1,
"arac_id": 3
}
},
{
"id": 4,
"cekici_mi": 0,
"plaka": "34AB321",
"sase": "JH4DA9340PS000417",
"created_at": "2022-06-02T23:47:18.000000Z",
"updated_at": "2022-06-02T23:47:18.000000Z",
"pivot": {
"islem_id": 1,
"arac_id": 4
}
}
]
}
Bu şekilde sisteminizde bir araç envanteri oluşturmuş olursunuz ve aynı araçları sonraki işlemlerde de kullanabilirsiniz. Her seferinde aynı aracı oluşturmamış olursunuz. Bu yapıda bir işlemde birden fazla araç ve çekici olabiliyor. Özellikle araçlara şaşe numarası da ekledim, plaka değişme olasılığı var ama şaşe değişmez. Hani olur da aynı araç farklı bir plaka ile gelirse plakasını şase numarasından aracı bulup güncelleyebilirsiniz.