繁体   English   中英

laravel查询只与最新记录联接

[英]laravel query join with only latest record

我正在使用Laravel 5.3并尝试使用它的产品返回抢劫,只有最新的订单最新的价格历史 如果我删除$q->latest()->first();两个连接都不返回任何内容$q->latest()->first(); 并用简单的orderBy()替换它我得到了所有结果。 我的查询是:

$data = $heist->with(['product'=> function($query) {
  $query->with(['orders' => function($q) {
    return $q->latest()->first();
  }]);
  $query->with(['price_history' => function($q) {
    return $q->latest()->first();
  }]);
}])->orderBy('completed_at', 'DESC')->orderBy('active', 'DESC')->get();

调用first()与调用take(1) - > get()[0]相同; 这意味着将返回的金额限制为1并将其返回。 你想要的只是限制部分。 所以如果你改变first()来取(1)。

更新

$data = $heist->with([
    'product'=> function($query) {
       $query->with(
            [
                'orders' => function($q) {
                   $q->latest()->take(1);
                },
                'price_history' => function($q) {
                   $q->latest()->take(1);
                }
            ]
        );
    }
])->orderBy('completed_at', 'DESC')->orderBy('active', 'DESC')->get();

正如评论中所讨论的,我认为最简单的方法是这样做

$heists = $heist->with(['product'=> function($query) {
  $query->with([
    'orders' => function($q) {
      return $q->orderBy('created_at', 'desc')->take(1)->get();
    },
    'price_history' => function($q) {
      return $q->orderBy('created_at', 'desc')->take(1)->get();
    }
  ]);
}])->orderBy('completed_at', 'desc')->orderBy('active', 'desc')->get();

希望这可以帮助 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM