我发现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