Giriş yapmadınız.

Duyuru

TÜRKÇE KİTAP DUYURUSU:
Laravel 5 : Laravel 5.1 Güzelliği (Türkçe)
Vue.js 2 : Vue.js 2 Majesteleri (Türkçe)

#1 07.01.2019 21:04:57

mustafa
Üye
Kayıtlı: 09.04.2018
Mesajlar: 9

Çoklu ilişkili tablolardan veri çekme

Merhabalar herkese
Öncelikle nasılsınız diye sormak isterim çünkü baya oldu buralara gelmeyeli
( Şimdi bazıları demek ki işi düştü de gelmiş diyebilir. Çok haklılar big_smile )
Sorum aslında laravelin yanında sql ile de ilgili diye düşünüyorum
Şöyle ki 4 tane modelim var
1- User
2- Store
3- Order
4- OrderItem

Bunlar arasında yukarıdan aşağıya doğru hasMany ile bağlantı mevcut

Burada bir kullanıcının bütün mağazalarındaki bütün siparişlerini sipariş kalemleri ile birlikte getirmek istersek optimum metod ne olur

foreach user->stores as store
            
       foreach store->orders as order
              
                foreach order->orderItems as item

en ölümcülü bu sanırım smile

Benim yöntemim ise şu şekilde

$orders=Order::with("orderItems")->whereIn("store_id",function($t){
            $t->select("id")->from("stores")->where("user_id",1);
        })->get();

İlk örneği atlarsak soru bu yapı için tamamen ilişkiler  ile halletmek mi yoksa subquery mi sorusuna dönüşüyor

Görüşüm kullandığım yöntemin uygun olduğu hakkında siz neler söylersiniz bu konu hakkında tavsiyeleriniz veya tecrübeleriniz nelerdir?

Son düzenleyen mustafa (07.01.2019 21:06:43)

Çevrimdışı

#2 07.01.2019 22:35:29

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,427
Website

Yanıt: Çoklu ilişkili tablolardan veri çekme

Böyle durumlarda kalmamak için tüm tablolarda user_id alanı tutarım.

Onun dışında subquery kullanmak yerine önce küçük sorgularla id leri dizi ile çekip whereIn içerisine direk diziyi vermek daha performanslı olabilir.

Bir de şunu denediniz mi:

$user = User::with('stores.orders.orderItems')->find(1);

Çevrimdışı

#3 08.01.2019 09:17:01

mustafa
Üye
Kayıtlı: 09.04.2018
Mesajlar: 9

Yanıt: Çoklu ilişkili tablolardan veri çekme

Tüm tablolarda user_id tutmak büyük sistemler için sıkıntı oluşturabilir belki ama ilk önce mağazaları çekip dizi olarak atmak dediğiniz gibi daha  mantıklı duruyor

Çevrimdışı

#4 08.01.2019 09:42:44

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,427
Website

Yanıt: Çoklu ilişkili tablolardan veri çekme

mustafa yazdı:

Tüm tablolarda user_id tutmak büyük sistemler için sıkıntı oluşturabilir belki ama ilk önce mağazaları çekip dizi olarak atmak dediğiniz gibi daha  mantıklı duruyor

Dükkanlar ve siparişler kullanıcılar arasında sürekli el değiştirmiyorsa order_id ya da store_id yanında bir de user_id tutmanız bir sıkıntı oluşturmaz.

Çevrimdışı

Forum alt kısmı