假设我在yii2中有表A及其活动记录,可以将具有最大创建日期的记录加载到模型的最佳方法是什么。
这是查询:
select *
from A
where created_date = (
select max(created_date) from A
)
现在我首先获得最大日期,然后在另一个数据库访问中使用它,即:
$max = A::find()->select("created_date)")->max();
$model = A::find()->where("created_date = :date",[":date"=>$max])->one();
我确信这可以通过一次访问数据库来完成,但我不知道如何。
请任何帮助。
答案 0 :(得分:14)
您的查询相当于:
SELECT * FROM A ORDER BY created_date DESC LIMIT 1;
您可以按created_date
降序排列您的记录并获取第一条记录,即:
$model = A::find()->orderBy('created_date DESC')->limit(1)->one();
为什么limit(1)
?正如nicolascolman指出的那样,根据official Yii documentation:
yii\db\ActiveRecord::findOne()
和yii\db\ActiveQuery::one()
都不会将LIMIT 1添加到生成的SQL语句中。如果您的查询可能返回多行数据,则应明确调用limit(1)以提高性能,例如,Customer :: find() - > limit(1) - > one()。
答案 1 :(得分:3)
$maxdate=A::find()->max('created_date');
答案 2 :(得分:2)
试试这个
$model = A::find()->orderBy("created_date DESC")->one();