基本的な取得方法 | Database

プライマリキーを用いて、DBから取得するにはモデルのコンストラクタにプライマリキーの値を渡します。
$aUser = new User(1);
echo $aUser->name;
取得できたか(該当するレコードがデータベースに存在したか)どうかを知るには、isSelected()メソッド を使用します。
$aUser = new User(1);
if ($aUser->isSelected()) {
  echo $aUser->name;
} else {
  // User Not Found
}
newの時点ではデータベースからロードしない場合は、selectOne()メソッド を使用してください。
$arUser = new User();

...

$aUser = $arUser->selectOne("id", 1);
echo $aUser->name;
selectOne()メソッド の第1引数はカラム名で第2引数は条件の値ですが、プライマリキーの場合は第1引数にその条件の値を渡すことができます。これは getCount() や select()メソッド でも同様です。
$aUser = $arUser->selectOne(1); // $arUser->selectOne("id", 1)と同じ
select()メソッドの返り値はモデル(ActiveRecordオブジェクト)の配列となります。
$users = $arUser->select("age", 30);  // 30歳のユーザ全て
foreach ($users as $aUser) {
  echo $aUser->name;
}
並び替えには setOrderBy() を使用してください。このメソッドは昇順(asc)、降順(desc)どちらでも、対象のカラムがNULLのレコードは最後尾となります。それらのレコードを先頭に持ってきたい場合は第3引数で "first" を指定してください。※第2引数を省略した場合は"asc"となります。
$users = $arUser->setOrderBy("added", "asc", "first")->select("age", 30);
戻り値をモデルの配列ではなく単に配列で受け取りたい場合、getRows()メソッド を使用します。この時、配列のキーはプライマリキーの値となります。
$rows = $arUser->getRows("age", 30);
foreach ($rows as $id => $row) {
  echo $id . ": " . $row["name"];
}
非常に単純なテーブルではActiveRecordクラスを作る必要がない場合もあります。モデルにメソッド(ロジック)を持たせる必要がないからです。クラスがない場合はMODEL関数を使用します。この関数は疑似モデルオブジェクトを返しますが、全てのメソッド(selectOne, select, save, delete... など)が疑似でないモデルと同様に使用できます。
$aUser = MODEL("User", 1);
echo $aUser->name;
複数の条件を指定する場合は setCondition()メソッド を使用します。例えば下記は年齢が30歳、かつ男性のユーザを取得します。
$arUser = new User();
$arUser->setCondition("age", 30);
$arUser->setCondition("sex", User::MALE);
$users = $arUser->select();
年齢が空(NULL)、またはNULLでないユーザは下記のようなコードで取得することができます。
$arUser = new User();
$arUser->setCondition(Sabel_Db_Condition::create(
  Sabel_Db_Condition::ISNULL, "age"
));
$users = $arUser->select();
$arUser = new User();
$arUser->setCondition(Sabel_Db_Condition::create(
  Sabel_Db_Condition::ISNOTNULL, "age"
));
$users = $arUser->select();
下記は「ステータスが1かつ年齢が30歳以上かつメールアドレスが "@example.com" で終わるユーザ」を取得します。
$arUser = new User();
$arUser->setCondition("status", 1);
$arUser->setCondition(Sabel_Db_Condition::create(
  Sabel_Db_Condition::GREATER_EQUAL, "age", 30
));
$arUser->setCondition(Sabel_Db_Condition::create(
  Sabel_Db_Condition::LIKE, "email", "@example.com"
)->type(Sabel_Db_Condition_Like::ENDS_WITH));
$users = $arUser->select();
下記はORを使用する例で「ステータスが1かつ年齢が25歳以上、または、ステータスが2かつ年齢が35歳以上のユーザ」を取得します。
$or = new Sabel_Db_Condition_Or();

$and1= new Sabel_Db_Condition_And();
$and1->setCondition(Sabel_Db_Condition::create(
  Sabel_Db_Condition::EQUAL, "status", 1
));
$and1->setCondition(Sabel_Db_Condition::create(
  Sabel_Db_Condition::GREATER_EQUAL, "age", 25
));

$and2= new Sabel_Db_Condition_And();
$and2->setCondition(Sabel_Db_Condition::create(
  Sabel_Db_Condition::EQUAL, "status", 2
));
$and2->setCondition(Sabel_Db_Condition::create(
  Sabel_Db_Condition::GREATER_EQUAL, "age", 35
));

$or->add($and1)->add($and2);

$arUser = new User();
$arUser->setCondition($or);
$users = $arUser->select();
このように、複雑な条件を設定するコードを書くのは簡単ではなく、面倒かもしれません。
それを解決するのが、次章で扱うファインダです。

関連項目