我發現Eloquent的加入邏輯比典型的準備語句複雜得多(閱讀我討厭它)。Laravel - 雄辯 - 渴望加載 - 約束/選擇/分組
有人可以幫我把下面的查詢翻譯成一個明智的雄辯的查詢,這是整個急切加載?
SELECT C.id,
C.seo_alias
FROM store_variants AS A
LEFT JOIN variants AS B ON B.id = A.id_variant
LEFT JOIN products AS C ON C.id = B.id_product
LEFT JOIN stores AS D ON D.id = A.id_store
WHERE D.id = 123
AND A.isActive > 0
GROUP BY C.id;
一個產品 - 許多變種
一個變種 - 許多商店
一個store_variant - 一個店
型號有storeVariantModel,variantModel,產品型號,storeModel。有數百萬行。
我看到它的方式,這個查詢包含過濾選擇,連接,分組和約束,因此它涵蓋了我每天遇到的大多數操作,所以如果任何人都可以解決這個問題,我衷心的感謝。
謝謝
編輯:使用Laravel 5.2
編輯:解決方案2:
感謝@Balraj對他的幫助,這基本上是最終的解決方案,我一直被迫使用:
storeVariantModel::
join( 'variants', 'variants.id_variant', '=', 'store_variants.id')
->join('products', 'products.id', '=', 'variants.id_product')
->join('stores', 'stores.id', '=', 'store_variants.id_store')
->with([
'variantModel.storeVariantModel.storeModel',
'variantModel.productModel'
])
->select('variants.*')
->where('stores.id','=',123)
->where('store_variants.isActive','>',0)
->get();
修改:我使用的是不再是 'GROUP BY'
優點:我得到模型與關係回來,約束中間表過濾器的數據,而不是隻有急於加載任何數據匹配約束
缺點:語法是球,我基本上調用加入兩次,我不再做一個選擇的一組有限的列
你能提供關於模型之間關係的細節嗎?姓名,基數等 – fubar
C有很多B,B有很多A,D有很多A – mils
有什麼名字?例如。 '$ store-> products' ... – fubar