2016-03-31 17 views
0

Emirlerim ve Order_Items tablosu var. Çizgi indirimi ve sipariş indirimi uyguladıktan sonra toplam ve KDV ile toplamı hesaplamam gerekiyor. Son fiyat inc ve ex vat nasıl hesaplanır? Ben Laravel kullanıyorum ve 20k emirleri ve 70k'lık order_items'im olduğunda gerçekten yavaş olan ilişkileri kullanıyorum.Mysql sorgusu veya Eloquent toplam öğe ve sipariş bazında hesap ve sipariş bazında hesaplamak için

siparişler

  • kimliği

    (PK) register_id
  • user_id
  • sale_time
  • has_discount
  • discount_is_percentage
  • DISCOUNT_AMOUNT

ORDER_ITEMS

  • id

    (PK)
  • order_id (FK)
  • has_discount
  • discount_is_percentage
  • DISCOUNT_AMOUNT
  • fiyat
  • miktar
  • VAT_RATE

Önce fiyatı ve KDV'yi indirimi uygulayarak ürün seviyesinde hesaplıyorum. Daha sonra satış toplamını almak için bunları ekleyin. Toplamda sipariş indirimini uygulayarak sipariş indirimini hesaplayın. İndirimden sonra ürün fiyatını hesaplamak için öğeleri indirimi uygulayın. Daha sonra sipariş toplamını almak için öğe miktarlarını ekleyerek. Laravel modelinde ve koleksiyonunda her şeyi yapıyorum ve binlerce eser olsa, ancak liste büyüdükçe her şey iyi çalışıyor, daha uzun ve daha uzun sürüyor.

Hesaplanan değerleri doğrudan sipariş tablosunda mı saklamalıyım? Ya da bu sorguyu başka nasıl optimize edebilirim. Bir yıla kadar rapor vermem gerekiyor ve sayım belli bir müşteri için yılda birkaç milyona çıkabilir.

Ayrıca, farklı sütunlara (user_id, register_id) ve gün ve saate göre gruplandırılmış raporlar yapacağım. Yani Eloquent koleksiyonu şimdilik çalışıyor ama gerçekten yavaş.

Ben

cevap

0

laravel 5.2 kullanıyorum ben size Order modeline accessors eklemek öneriyoruz. Böyle

şey hile yapmak gerekir: asıl sorun performansı olduğundan

// comment it out if you don't need it in your model 
protected $appends = ['total']; 

public function getTotalAttribute() 
{ 
    $items = $this->items(); 
    // do the needed calculations 

    return $result; 
} 

DÜZENLEMEYİ

, bunun yerine mutator ve queuecalculate/save process bir kullanabiliriz. Böylece toplamları order kayıt/değişiklik üzerinde hesaplar ve sonucu orders tablosuna koyarsınız.

+0

Bunu zaten aldım, bu yüzden son toplamı alıyorum ama daha büyük veri kümeleri için yavaş. Ben de ilişki yükleme istekli ve Postman ile çalıştığınızda sorgu sayısı 4 ile 700ms. Ancak yanıt süresi yaklaşık 30 saniyedir. – James

İlgili konular