【问题标题】:Laravel: Order By hasMany relationship's first (oldest) entryLaravel:按hasMany关系的第一个(最旧)条目排序
【发布时间】:2016-02-23 02:36:00
【问题描述】:

我有以下表格:

PRODUCTS id | title -- | --------------- 1 | First Product 2 | Second Product 3 | Third Product

PRODUCT_VERSIONS 编号 |产品编号 |发布日期 -- | ---------- | ------------ 1 | 1 | 2013-01-01 2 | 1 | 2014-01-01 3 | 1 | 2015-03-01 4 | 2 | 2013-02-02 5 | 2 | 2014-02-02 6 | 2 | 2015-02-02 7 | 3 | 2013-03-03 8 | 3 | 2014-03-03 9 | 3 | 2015-03-03


关系

Product->hasMany("ProductVersion")

ProductVersion->belongsTo("Product")


我要做的是选择所有产品并按第一个(最旧的)product_version.release_date 订购。

或者最好按 release_date 对 product_versions 排序,按 addon_id 分组,然后加入 product 表?

我已经搜索并搜索了一个解决方案,并且我有几个几乎可以工作的查询。我想知道 Laravel 是否有一种简单的(ish)方法。

【问题讨论】:

标签: php mysql laravel


【解决方案1】:

您可以为此使用连接。加入两个表,按 id 分组,按最新日期排序,我将其别名为“latest_release_date”:

$products = Product::selectRaw('products.*, MAX(product_versions.release_date) as latest_release_date')
    ->leftJoin('product_versions', 'product_versions.product_id', '=', 'products.id')
    ->orderBy('latest_release_date', 'DESC')
    ->groupBy('products.id')
    ->get();

您提到了按addon_id 分组,但它没有显示在您的表格示例中的任何地方,所以我只是使用了您提供的表格示例中的名称。

【讨论】:

    猜你喜欢
    • 2022-01-10
    • 2015-04-22
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 2020-05-03
    • 2019-05-14
    相关资源
    最近更新 更多