テーブルから最後のレコード(つまり、MAX(id)
を持つ)を選択するにはどうすればよいですか?
次のステートメントは正常に機能しますが、最初のレコードを選択します。
$statistics = SystemStatisticsHistory::findOne(1);
Max id
のモデルを取得するには、逆の順序を適用して1つに制限します。
_SystemStatisticsHistory::find()->orderBy(['id' => SORT_DESC])->one();
_
別のオプションは、次のようにmax
で副選択を使用することです。
_SystemStatisticsHistory::find()
->where(['id' => SystemStatisticsHistory::find()->max('id')])
->one();
_
最後のオプションを使用していくつかのニュアンスがあります、チェック この質問 。
max()
here のドキュメントを確認できます。
私は個人的に最初のバリエーションを使用することを好みます。
最初のレコードを取得するには、最初のクエリで順序の方向を_SORT_ASC
_に変更し、2番目のクエリでmax()
をmin()
に変更します。
P.S。ハードコードされたid
は悪い習慣です。
最適化されたもの
SystemStatisticsHistory::find()->select(['id'=>'MAX(`id`)'])->one()->id;
または、数を増やしたい場合
SystemStatisticsHistory::find()->select(['id'=>'( MAX(`id`)+ 1) '])->one()->id;