SOY App開発の説明 SOY2DAOでデータベースを利用する1
前回までで管理画面にフォームを設置するところまで説明しました。
今回はアプリ用のデータベースを用意してデータを放り込んでいきます。
SOY App開発の解説 SOY2HTMLでフォームを設置する
データベースを利用するために下記をダウンロードしてください。
データベースを利用できるように、
admin.phpの57行目付近にある
if(!file_exists(CMS_COMMON . "db/" . APPLICATION_ID . ".db")){ $logic = SOY2Logic::createInstance("logic.InitLogic"); $logic->init(); }
データベースの初期化に関するコードがコメントアウトされていたら、
コメントアウトを外してください。
ここで使われているSOY2Logic::createInstanceは、
用意したロジックをコンストラクトする関数で、
config.phpで設定したSOY2::RootDirからドット区切りでロジックのファイルのパスを指定します。
SOY2::RootDirはsrcディレクトリに指定しているので、
引数でlogic.InitLogicを入れているということは、
/CMSインストールディレクトリ/app/webapp/mock/src/logic/InitLogic.class.php
を読み込むことになる。
InitLogic.class.phpのコードにありますが、
SOY Appで利用するデータベースは定数のSOYCMS_DB_TYPEで指定しており、
これはSOY CMSのデータベース設定をそのまま利用します。
データベースの初期化はSOY2DAOを使ってインサートすることで、
SQLiteとMySQLの文法の違いをフォローします。
(詳しくは後日の記事で記載します。)
最初にSOY Mockのサンプル用のSQLのスキーマは下記になります。
(SQLite版 : /src/logic/table_sqlite.sql)
CREATE TABLE soymock_sample( id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(512), description TEXT, create_date INTEGER, update_date INTEGER );
SOY2DAOを使うためにテーブルに対応したオブジェクトのファイルと、
対になるDAOのファイルを作成します。
config.phpでSOY2DAOの設定のディレクトリの設定で、
src以下のdomainディレクトリにSOY2DAO関連のファイルを配置します。
今回は/src/logic/table_sqlite.sqlでsoymock_sampleというテーブルを作成したので、
SOYMock_Sample.class.php
SOYMock_SampleDAO.class.php
この二つのファイルを作成します。
SOYMock_Sample.class.phpには、
カラム名に紐づいたプロパティと
そのプロパティに紐づいたgetterとsetterを用意します。
<?php /** * @table soymock_sample */ class SOYMock_Sample { private $name; function getName(){ return $this->name; } function setName($name){ $this->name = $name; } } ?>
プロパティ、getterとsetterが揃っていないとエラーになります。
ここで大事な点は
classの上に@tableの形でどのテーブルを読むかを指示します。
ちなみに、コメント+@で指示するときは、
/** * @ */
*の数は上記の記述のように守りましょう。
*の数を間違うと読み込まれません。
他にプロパティの指定で注意すべき点として、
/** * @id */ private $id;
CREATE TABLEの記述でPRIMARY KEYを指定した時には、
プロパティの上に@idを付けます。
プロパティとカラム名が異なる場合は、
/** * @column create_date */ private $createDate; function getCreateDate(){ return $this->createDate; } function setCreateDate($createDate){ $this->createDate = $createDate; }
とする。
Tableのカラムにはないが、プロパティ、getterとsetterを用意したい場合は、
/** * @no_persistent */ private $memo; function getMemo(){ //なんかの処理を書く }
とする。
以上の内容がテーブルに対応したオブジェクトの作り方です。
DAO側の記述の説明は次回にします。