急切加载Laravel的条件

时间:2018-03-26 21:10:40

标签: php laravel-5 eager-loading laravel-eloquent

我有以下表格

  1. 购买
  2. 产品
  3. 销售
  4. 以及关系

    1. 购买有很多产品
    2. 销售有很多产品
    3. 产品有很多销售
    4. 产品属于购买
    5. 我想获得购买的已售产品。所以我的查询就像这样

      $purchase = Purchases::with(['product','product.sale' => function ($query){
                      return $query->where('status','complete');
                  }])->find($request->id);
      

      我的问题是在销售表中检查状态了吗?如果没有,那么没有使用原始查询有什么办法我可以检查销售表中的以下条件吗?

2 个答案:

答案 0 :(得分:0)

您可以按以下方式解决:

$purchase = Purchases::with('product')->whereHas('product.sale',function ($query){
            $query->where('status','complete');
        })->find($request->id);

答案 1 :(得分:0)

从关系中检索相关模型时,将使用您应用于 $ query 对象的约束。在上面的代码中,您可以在检索 sale 关系时应用约束。因此,您将获得:

  • 以ID $ request-> id
  • 购买
  • 所有相关产品
  • 对于每个相关产品,如果其状态为完成,则会获得销售对象

如果您只想获得与status = complete有销售关系的产品,则需要为产品关系提供约束,而不是 product.sale 。以下将解决这个问题:

$purchase = Purchases::with(['product' => function($productQuery) {
    $productQuery->whereHas('sale', function($saleQuery) {
        $saleQuery->where('status','complete');
    });
}])->find($request->id);