SOY CMS / SOY Shop

ブログトップ

SOY App開発の説明 SOY2DAOでデータベースを利用する1

2014年02月04日

前回までで管理画面にフォームを設置するところまで説明しました。

今回はアプリ用のデータベースを用意してデータを放り込んでいきます。

SOY App開発の解説 SOY2HTMLでフォームを設置する




データベースを利用するために下記をダウンロードしてください。

soymock_0.0.3.zip



データベースを利用できるように、

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側の記述の説明は次回にします。