Arkadaşlar merhaba,
Tablolarım arasında ilişki bulunuyor. Import işlemini başarıyla gerçekleştiriyorum.
Ancak aynı dosyayı seçildiği zaman ayrı kayıtlar olarak yazıyor. Aynı dosya seçildiği zaman veya dosyada değişiklik yapılıp tekrar yüklendiği zaman veritabanında ilgili yerler de güncellensin istiyorum. Bu kontrolü yapamadım yardımcı olur musunuz?
Bir de seçilen dosyada bulunan satırdaki tedarikçi adı yoksa nasıl uyarı verdirebilirim?
GirisYukleController.php içeriği
<?php
namespace App\Http\Controllers;
use App\Imports\GirisImport;
use App\Models\Tedarikci;
use App\Models\Urun;
use App\Models\Giris;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
class GirisYukleController extends Controller
{
public function show(){
$urunler = Urun::all();
$tedarikciler = Tedarikci::all();
return view('giris.ekle',compact('urunler','tedarikci'));
}
public function store(Request $request){
$tedarikci = new Tedarikci();
$tedarikci->tedarikci_adi = $request->tedarikci_adi;
$urun=new Urun();
$Urun->id = $request->urun_id;
Excel::import(new GirisImport($urun),$request->file('girisyukle'));
return back()->with('status', 'Giriş Başarıyla Yüklendi.');
}
}
GirisImport.php içeriği
namespace App\Imports;
use App\Models\Tedarikci;
use App\Models\Urun;
use App\Models\Giris;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
class GirisImport implements WithHeadingRow, ToModel
{
private $tedarikciler;
private $tarih;
public function __construct(Urun $urun)
{
$this->tedarikciler=Tedarikci::select('id','tedarikci_adi')->get();
$this->urun=$urun;
$this->tarih=$_REQUEST['tarih'];
}
/**
* @param array $row
*
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function model(array $row)
{
$tedarikci=Tedarikci::where('tedarikci_adi',$row['Tedarikçi'])->first();
return new Giris([
'urun_id'=>$this->urun->id,
'tedarikci_id'=>$tedarikci->id,
'toplam'=>$row['Toplam'],
'tarih'=>$this->tarih
]);
}