Yii は、データがどのように並べられるべきかについて、何の仮定も行いません。優れたデータベース設計では、代理キーを使用する場合、そのキーには意味のない値が必要です。つまり、注文には使用しないでください。
その問題はさておき、おそらくクエリを実行する最良の方法は次のとおりです。
$first = Post::model()->find(array('order'=>'id ASC'));
find
の代わりに使用することで、結果findAll
に自動的に a が適用さLIMIT 1
れます。データベースが一貫して結果を並べ替えることが保証されるため、order by 句を含めることをスキップしません。
このクエリを頻繁に使用する場合は、次のメソッドを作成できます。UPDATE : primaryKey が複合または欠落している場合に例外をスローするように変更しました。エラー チェックをさらに追加することもできますが、それは読者の課題として残します。;)
public function first($orderBy = null){
if(!$orderBy){
$orderBy = self::model()->tableSchema->primaryKey;
}
if(!is_string($orderBy)){
throw new CException('Order by statement must be a string.');
}
return self::model()->find(array('order'=>$orderBy));
}
次に、CActiveRecord を拡張するクラスにこのメソッドを含め、そのクラスからすべてのモデルを拡張します。
私が書いたラッパーは、デフォルトで主キーによって結果を並べ替えますが、必要に応じて別の列と方向 (ASC または DESC) を渡すこともできます。
次に、post クラスに対してこれを行うと、次のように最初のモデルにアクセスできます。
$first = Post::model()->first();