gpt4 book ai didi

php - Yii2:从 hasMany 关系中选择最后一条记录

转载 作者:行者123 更新时间:2023-11-29 01:15:48 24 4
gpt4 key购买 nike

我对 mysql 的了解非常基础,现在我面临一个“复杂”(对我而言)的查询,我被困在其中,所以如果有人能给我一些启发,请提前致谢。

我有三个表:

订单

id | name | comments | ...

订单行

id | name | sDate | eDate | comments | ...

OrderLinesStats

id | lineID | date | status | ...

每天 OrderLinesStats 都会通过 cron 作业更新,并获取包含实际日期、状态和其他字段的新记录,因此最高 ID 是实际数据。

我试图通过 yii2 中的关系获取最后一个统计行,如下所示:

在 OrdersLines 模型中:

public function getLastOrdersLinesStats()
{
return $this->hasMany(OrdersLinesStats::className(), ['lineID' => 'id'])
->orderBy(['id'=>SORT_DESC])
->groupBy('lineID');
}

订单模型:

public function getOrdersLines()
{
return $this
->hasMany(OrdersLines::className(), ['orderID' => 'id'])
->orderBy(['typeID' => SORT_ASC, 'name' => SORT_ASC])
->with(['lastOrdersLinesStats']);
}

但是当我调试查询时,查询看起来像这样:

SELECT * FROM `ordersLinesStats` WHERE `lineID` IN (1873, 1872, 1884, 1883, 1870, 1874, 1876, 1880, 1871, 1877, 1881, 1882, 1885, 1886, 1869, 1875, 1878) GROUP BY `lineID` ORDER BY `id` DESC

并且没有给我每一行的最后一个统计记录……事实上,它给了我最旧的一个。似乎我遗漏了什么,但我找不到。

再次感谢

最佳答案

您需要做的就是将 getLastOrdersLinesStats() 更改为如下所示:

public function getLastOrdersLinesStats()
{
return $this->hasMany(OrdersLinesStats::className(), ['lineID' => 'id'])
->orderBy(['id'=>SORT_DESC])
->one();
}

这基本上返回了每个订单所需的最后一个 OrderLinesStats 行

您可以按如下方式访问它:

例如,如果您有一个名为 myOrder 的对象然后你可以访问你想要的行 myOrder->lastOrderLinesStats

关于php - Yii2:从 hasMany 关系中选择最后一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45737941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com