ブログトップ
SOY App開発の説明 SOY2DAOでデータベースを利用する2
2014年02月04日
前回はSOY2DAOで使うファイルのオブジェクトの方を説明しました。
今回はDAOファイルの方の説明を記載したいと思います。
SOY App開発の説明 SOY2DAOでデータベースを利用する1
/CMSインストールディレクトリ/app/webapp/mock/src/domain/SOYMock_SampleDAO.class.php
で下記の様に抽象クラスを作成します。
<?php /** * @entity sample.SOYMock_Sample */ abstract class SOYMock_SampleDAO extends SOY2DAO{ } ?>
作成したDAOのクラスはSOY2DAOクラスを継承して作成します。
class名の上に記載されている@entityには、
対応するオブジェクトのファイルをdomain以下からドット区切りで指定します。
DAOでデータベースをいじるための関数は抽象メソッドにします。
INSERT文を追加するには
/** * @return id * @trigger onInsert */ abstract function insert(SOYMock_Sample $bean);
とします。
この関数の呼び出し方は次回に詳しく記載しますが、
$dao->insert($obj);のように呼び出すと、
関数の処理中にINSERT文が生成され、
データベースに値が挿入されます。
関数の上にあるコメント内の@return idはinsert文が実行された後に返される値を指定し、
@triggerはinsertが実行される前に実行されるトリガーを指定できます。
今回は@trigger onInsertと記載されているので、
/** * @final */ function onInsert($query, $binds){ $binds[":createDate"] = time(); $binds[":updateDate"] = time(); return array($query, $binds); }
上記のようなfinalメソッドを用意します。
SELECT文の関数は
/** * @return list * @order id desc */ abstract function get(); /** * @return object */ abstract function getById($id);
このように用意します。
get()の場合は特に条件の指定なく全件取得で、
getById($id)では、関数名からWHERE id = :idのような条件文となります。
コメント内にある@returnはlistの場合はオブジェクトの配列で返し、
objectの場合は一つのオブジェクトを返します。
@orderはORDER BY句で、@order id descの場合は、
ORDER BY id descをSQL文を追加することになります。
WHERE句の条件を複数にしたい場合は、
/** * @return list * @query name = :name AND create_date > :createDate * @order id desc */ abstract function getByNameAndCreateDate($name, $createDate);
上記のように@queryでWHERE句に入れる条件を指定します。
引数に入れた値がプレースホルダ-として扱われます。
関数名はgetBy***とすれば、自由に付けても構いません。
DELETE文やCOUNT文も上記と同様に作成してください。
上記のような抽象メソッドではなく、
自身でPHPの処理やSQLの実行を組み合わせた複雑な処理を行いたいという場合には、
function getSamples($str){ $dao = new SOY2DAO(); $sql = "SELECT * FROM soymock_sample WHERE name LIKE %%:name%%"; $binds = array(":name" => $str); try{ $results = $dao->executeQuery($sql, $binds); }catch(Exception $e){ $results = array(); } return $results; }
このような関数を用意すれば使えます。