【问题标题】:Retrieve results based on condition of relation laravel根据关系 laravel 的条件检索结果
【发布时间】:2014-06-04 04:01:15
【问题描述】:

如何使用 Laravel 实现以下目标。

我有一个表 Products,它与 ProductSizes 具有 oneToMany 关系 - 产品尺寸包含与产品相关的尺寸。

我正在尝试查询哪里 - 我得到所有产品,其中 productSizes 的大小为“Medium”。

我查看了使用“With”,但这只是返回一个带有整个产品列表的对象,只有这些尺寸......

我实际上只想带回在 ProductSizes 表的 size 列中具体只有“Medium”值的产品。

【问题讨论】:

  • This 可能会回答您的问题。从中号大小的 productSizes 表中获取您的唯一产品 ID,然后将其用于查询 ID 位于结果集中的产品表。

标签: php laravel


【解决方案1】:
$medium_product_ids = ProductSizes::where('size_name', '=', 'medium')->distinct()->get(array('product_id'));
$products = Products::whereIn('product_id',$medium_product_ids)->get();

【讨论】:

    【解决方案2】:

    也许使用连接:

    Product::join('product_sizes', 'product_sizes.id', '=', 'products.product_size_id')
        ->where('size_name' = 'medium')
        ->get();
    

    使用 'with' 在查询运行后立即加载关系,因此您无法限制使用它。

    【讨论】:

      【解决方案3】:

      试试这个,我认为它应该得到只有中等尺寸的产品:

      Products::leftJoin('ProductSizes', 'products.id', '=', 'ProductSizes.product_id')
          ->groupBy('products.id')
          ->having(DB::raw('count(*) = 1 and size="Medium"'))
          ->get();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-17
        • 2020-07-04
        • 2021-12-08
        • 2015-03-26
        • 1970-01-01
        • 2020-05-04
        • 2016-04-29
        • 2018-05-12
        相关资源
        最近更新 更多