• 31-03-2018, 11:11:17
    #1
    Aşağıda verdiğim örnekte, Eloquent ile koşullu sorguların ne kadar basit kullanıldığından bahsettim. Örnek içeriği olarak fatura, fatura satırları ve stok kartı üçlüsü üzerinden gittim. Buna birçok yerde ihtiyaç duyulabilir; Kitap ve yazar ilişkilerinde, yorum ve gönderi ilişkilerinde vs.

    Elimizde stok kartları (Stock), faturalar (Invoice) ve fatura satırları (InvoiceRow) adında üç adet model olduğunu varsayalım. Stok kartını görüntülemek istediğimizde stok bilgilerinin yanında, mevcut stoğun hangi faturalarda işlem gördüğünü de listelemek gerekecek. Faturalar ve fatura satırları modelleri şöyle olsun:

    Invoice.php
    // ...
    use App\Models\InvoiceRow;
    
    class Invoice extends Model
    {
        public function rows()
        {
            return $this->hasMany(InvoiceRows::class);
        }
    }
    InvoiceRow.php
    // ...
    use App\Models\Stock;
    use App\Models\Invoice;
    
    class InvoiceRows extends Model
    {
        public function stock()
        {
            return $this->belongsTo(Stock::class);
        }
    
        public function invoice()
        {
            return $this->belongsTo(Invoice::class);
        }
    }
    Yukarıda, Fatura ve fatura satırları modellerini ilişkilendirdik. Ek olarak fatura satırları modeliyle stok kartları modelini ilişkilendirdik. Her bir fatura satırının, bir faturaya ve bir stok kartına ait olduğunu ($this->belongsTo() metodu) söyledik.

    StockController.php
    // ...
    use App\Models\Stock;
    use App\Models\Invoice;
    
    class StockController extends Controller
    {
        // ...
        public function show($id)
        {
            $stock = Stock::findOrFail($id);
            $invoices = Invoice::with('rows')->whereHas('rows', function($query) use ($stock){
                $query->where('stock_id', $stock->id);
            })->orderBy('created_at', 'desc')->get();
    
            return view('stock.show', compact('stock', 'invoices'));
        }
    }
    Yukarıdaki kontrolcüde stok kartı görüntülemek istedik. $invoices değişkenine mevcut açmak istediğimiz stok kartının bulunduğu faturaların koleksiyonunu (listesini) getirttik. Burada anahtar metod whereHas metodu. Bu metod sayesinde sorgumuza bir şart koştuk. Dedik ki eğer fatura satırları arasında belirttiğimiz stok varsa faturaları getir.

    Kolay gelsin.
    Kaynak: https://yilmazdemir.com.tr/eloquent-iliskilerinde-kosullu-sorgular
  • 11-04-2018, 12:00:49
    #2
    dev
    Kurumsal Üye
    yidemir adlı üyeden alıntı: mesajı görüntüle
    Aşağıda verdiğim örnekte, Eloquent ile koşullu sorguların ne kadar basit kullanıldığından bahsettim. Örnek içeriği olarak fatura, fatura satırları ve stok kartı üçlüsü üzerinden gittim. Buna birçok yerde ihtiyaç duyulabilir; Kitap ve yazar ilişkilerinde, yorum ve gönderi ilişkilerinde vs.

    Elimizde stok kartları (Stock), faturalar (Invoice) ve fatura satırları (InvoiceRow) adında üç adet model olduğunu varsayalım. Stok kartını görüntülemek istediğimizde stok bilgilerinin yanında, mevcut stoğun hangi faturalarda işlem gördüğünü de listelemek gerekecek. Faturalar ve fatura satırları modelleri şöyle olsun:

    Invoice.php
    // ...
    use AppModelsInvoiceRow;
    
    class Invoice extends Model
    {
        public function rows()
        {
            return $this->hasMany(InvoiceRows::class);
        }
    }
    InvoiceRow.php
    // ...
    use AppModelsStock;
    use AppModelsInvoice;
    
    class InvoiceRows extends Model
    {
        public function stock()
        {
            return $this->belongsTo(Stock::class);
        }
    
        public function invoice()
        {
            return $this->belongsTo(Invoice::class);
        }
    }
    Yukarıda, Fatura ve fatura satırları modellerini ilişkilendirdik. Ek olarak fatura satırları modeliyle stok kartları modelini ilişkilendirdik. Her bir fatura satırının, bir faturaya ve bir stok kartına ait olduğunu ($this->belongsTo() metodu) söyledik.

    StockController.php
    // ...
    use AppModelsStock;
    use AppModelsInvoice;
    
    class StockController extends Controller
    {
        // ...
        public function show($id)
        {
            $stock = Stock::findOrFail($id);
            $invoices = Invoice::with('rows')->whereHas('rows', function($query) use ($stock){
                $query->where('stock_id', $stock->id);
            })->orderBy('created_at', 'desc')->get();
    
            return view('stock.show', compact('stock', 'invoices'));
        }
    }
    Yukarıdaki kontrolcüde stok kartı görüntülemek istedik. $invoices değişkenine mevcut açmak istediğimiz stok kartının bulunduğu faturaların koleksiyonunu (listesini) getirttik. Burada anahtar metod whereHas metodu. Bu metod sayesinde sorgumuza bir şart koştuk. Dedik ki eğer fatura satırları arasında belirttiğimiz stok varsa faturaları getir.

    Kolay gelsin.
    Kaynak: https://yilmazdemir.com.tr/eloquent-iliskilerinde-kosullu-sorgular
    Eloquent büyük nimet
  • 11-04-2018, 17:28:05
    #3
    Meftun adlı üyeden alıntı: mesajı görüntüle
    Eloquent büyük nimet
    Aynen öyle, ama R10'daki "yazılımcılar"ın bundan haberi yok.
  • 11-04-2018, 18:13:32
    #4
    dev
    Kurumsal Üye
    yidemir adlı üyeden alıntı: mesajı görüntüle
    Aynen öyle, ama R10'daki "yazılımcılar"ın bundan haberi yok.
    Aslında Laravel gerçekten güzel bir fw. Laravel'e karşı olumsuz bakanların çoğu hiç kullanmamış olmasıdır. Bununda sebebide sektörde Laravel isminin çok dönmesinde dolayı oluşan antipati diye düşünüyorum.
    Ayrıca Laravel karşı oluşuan "Laravel çok yavaş" önyargısı var. Hiç bir siste kusursuz değildir Doğru optimizasyonlar ile güzel sonuçlar alınıyor ve development işini baya kolaylaştırıyor
  • 16-06-2018, 22:22:29
    #5
    Ben de yeni yeni öğrenmeye çalışıyorum Laravel'i. Kendimce bir script ile uğraşıyorum ve bu relationship fonksiyonları ile onlarca satır kod yazmaktansa iki satırla istediğim şekilde ilişki kurabiliyorum.