我有一个像这样的表格布局:
products
id
productname
product_weights
id
productid
weight
product_flavours
id
productid
flavour
我正在尝试生成所有可能的产品变体列表。有些产品的尺寸没有变化,有些产品没有风味变化,有些产品兼而有之。我目前的想法是使用连接。到目前为止我的查询:
DB::table('product_weights')
->join('products', 'products.id', '=', 'product_weights.prodid')
->select('product_weights.value', 'products.productname')
->get();
这给了一些有用的东西,var_dump给出了:
[{"value":"1kg","productname":"Item 1"},{"value":"2.1kg","productname":"Item 2"},{"value":"250g","productname":"Item 3"},{"value":"1kg","productname":"Item 3"}
问题是不会返回没有重量变化的产品item 5
。当然,我也需要建立口味。
然后我想制作一个类似{'项目1 1kg','项目2 2.1kg','项目3 250g',&#39 ;项目3 1kg'}
有什么想法吗?我有点觉得我做错了。帮助将不胜感激!
更新:感谢下面的评论,leftJoin
取得了一些进展。我可以产生重量或味道的所需结果,但不能同时产生两者。现在的代码是:
$product_join_weights = DB::table('products')
->leftJoin('product_weights', 'products.id', '=', 'product_weights.prodid')
->select('products.productname', 'product_weights.value')
->get();
$product_join_flavour = DB::table('products')
->leftJoin('product_flavours', 'products.id', '=', 'productattributes.prodid')
->select('products.productname', 'product_flavours.value')
->get();
任何想法如何结合起来?
答案 0 :(得分:2)
为什么不将连接链接在一起,而不是将两个数组组合在一起?
$product_join = DB::table('products')
->leftJoin('product_weights', 'products.id', '=', 'product_weights.prodid')
->leftJoin('product_flavours', 'products.id', '=', 'productattributes.prodid')
->select('products.productname', 'product_flavours.value', 'products.productname', 'product_weights.value')
->get();
Left Joins从table1获取完整记录集,其中包含 匹配table2中的记录。该 如果不进行匹配,则右侧的结果为NULL。
答案 1 :(得分:1)
我认为你可以简单地将左连接加倍......
类似的东西:
$product_weights_and_flavours = DB::table('products')
->leftJoin('product_weights', 'products.id', '=', 'product_weights.prodid')
->leftJoin('product_flavours', 'products.id', '=', 'productattributes.prodid')
->select('products.productname', 'product_weights.value', 'product_flavours.value')
->get();