【问题标题】:Laravel joins including where there is no matchLaravel 加入,包括没有匹配的地方
【发布时间】:2015-03-27 05:59:47
【问题描述】:

我有一个这样的表格布局:

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 不会被退回。当然,我也需要添加风味。

然后我想创建一个数组,例如 {'Item 1 1kg', 'Item 2 2.1kg', 'Item 3 250g', 'Item 3 1kg'}

有什么想法吗?我有点觉得我做错了加入。帮助将不胜感激!

更新:感谢下面的 cmets,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();

有什么想法可以将它们组合起来吗?

【问题讨论】:

  • ->leftJoin 或许。
  • @AbhikChakraborty 是的,谢谢! LeftJoin 帮了大忙。我现在的问题是将两者结合起来。我已经更新了我的问题。

标签: php mysql database laravel


【解决方案1】:

为什么不将两个数组组合在一起,而不是将连接链接在一起呢?

 $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 中获取 完整 组记录,其中 表 2 中的匹配记录。这 不匹配时,右侧的结果为NULL。

http://www.w3resource.com/sql/joins/perform-a-left-join.php

【讨论】:

    【解决方案2】:

    我认为您可以简单地将左连接加倍...

    类似这样的:

    $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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多