Yii2按最大日期选择?

时间:2015-02-18 07:12:05

标签: mysql activerecord yii2

假设我在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();

我确信这可以通过一次访问数据库来完成,但我不知道如何。

请任何帮助。

3 个答案:

答案 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();