Top / PHP関連 / Jobeetチュートリアル第3日目(Propel版)

Jobeetチュートリアル第3日目(Propel 版)

http://www.symfony-project.org/jobeet/1_2/Propel/ja/03

この節では、symfonyのデフォルトのORMであるPropelにおける内容を記載しております。

時間の目安

第3日目のチュートリアルが完了するまでの目安

3時間~10時間

DB周りの設定やデータモデルの検討をします。
第3日目は、第1日目と同様に結構重めのタスクになります。
さらっと流すと3時間、じっくり試すと10時間かかると思われます。

データモデルの作成

エンティティ関係図(Entiry-Relation図)を作成します。
ER図を描くツールは、いくつかありますが、MySQLをRDBMSに選択した場合、[MySQL Workbench]を選択すべきでしょう。

 

MySQL Workbenchを使用したいがために、MySQLを選択するというのも有りだと思います。
MySQL Workbenchのインストール方法は、以下の記事を参照してください。

MySQL Workbenchで論理DBを検討する

論理DBのER図を描くためには、日本語が表示できなければなりません。
このため、[Tools]-[Options...]を選択します。
http://www.techch.com/wikiparts/Sym_34.png

 

フォントタブを選択し、フォントフェイスを[メイリオ]のような日本語フォントを選択します。
特に[メイリオ]で無くとも構わず、[MS ゴシック]でも構いません。日本語が表示できるフォントであることが必要になります。
ちなみに全部、修正する必要があります。
http://www.techch.com/wikiparts/Sym_35.png

 

論理モデルの作成

MySQL Workbenchを使用して論理DBを描いてみました。

Sym_36.png
 

作成した論理モデルです。

これにより、論理DBでお話ができるようになります。

物理モデルの作成

MySQL Workbenchを使用して、物理DBを描いてみました。

Sym_37.png
 

作成した物理モデルです。

これにより、このようにDDLスクリプトが作成できます。

 
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

CREATE SCHEMA IF NOT EXISTS `jobeet` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `jobeet`;

-- -----------------------------------------------------
-- Table `jobeet`.`jobeet_category`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `jobeet`.`jobeet_category` (
  `id` INT NOT NULL AUTO_INCREMENT COMMENT 'ID' ,
  `name` VARCHAR(255) NOT NULL COMMENT 'カテゴリ名' ,
  PRIMARY KEY (`id`) ,
  UNIQUE INDEX `uk_name` USING BTREE (`name` ASC) )
ENGINE = InnoDB
COMMENT = 'カテゴリ';


-- -----------------------------------------------------
-- Table `jobeet`.`jobeet_job`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `jobeet`.`jobeet_job` (
  `id` INT NOT NULL AUTO_INCREMENT COMMENT 'ID' ,
  `category_id` INT NOT NULL COMMENT 'カテゴリID' ,
  `type` VARCHAR(255) NULL COMMENT '契約条件' ,
  `company` VARCHAR(255) NOT NULL COMMENT '企業名' ,
  `logo` BLOB NULL COMMENT 'ロゴ' ,
  `url` VARCHAR(255) NULL COMMENT 'URL' ,
  `position` VARCHAR(255) NOT NULL COMMENT '業務' ,
  `location` VARCHAR(255) NOT NULL COMMENT '就業場所' ,
  `description` LONGTEXT NOT NULL COMMENT '仕事の説明' ,
  `how_to_apply` LONGTEXT NOT NULL COMMENT '応募方法' ,
  `token` VARCHAR(255) NOT NULL COMMENT 'トークンキー' ,
  `is_public` BOOLEAN NOT NULL DEFAULT TRUE COMMENT '公開' ,
  `is_activated` BOOLEAN NOT NULL DEFAULT FALSE COMMENT '有効' ,
  `email` VARCHAR(255) NOT NULL COMMENT 'E-Mail' ,
  `expires_at` TIMESTAMP NOT NULL COMMENT '有効期限' ,
  `created_at` TIMESTAMP NOT NULL COMMENT '作成日時' ,
  `updated_at` TIMESTAMP NOT NULL COMMENT '更新日時' ,
  PRIMARY KEY (`id`) ,
  UNIQUE INDEX `uk_token` USING BTREE (`token` ASC) ,
  INDEX `fk_category` (`category_id` ASC) ,
  CONSTRAINT `fk_category`
    FOREIGN KEY (`category_id` )
    REFERENCES `jobeet`.`jobeet_category` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = '求人';


-- -----------------------------------------------------
-- Table `jobeet`.`jobeet_affiliate`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `jobeet`.`jobeet_affiliate` (
  `id` INT NOT NULL AUTO_INCREMENT COMMENT 'ID' ,
  `url` VARCHAR(255) NOT NULL COMMENT 'URL' ,
  `email` VARCHAR(255) NOT NULL COMMENT 'E-Mail' ,
  `token` VARCHAR(255) NOT NULL COMMENT 'トークンキー' ,
  `is_active` BOOLEAN NOT NULL DEFAULT FALSE COMMENT '有効' ,
  `created_at` TIMESTAMP NOT NULL COMMENT '作成日時' ,
  PRIMARY KEY (`id`) ,
  UNIQUE INDEX `uk_affiliate` USING BTREE (`email` ASC) )
ENGINE = InnoDB
COMMENT = 'アフィリエイト';


-- -----------------------------------------------------
-- Table `jobeet`.`jobeet_category_affiliate`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `jobeet`.`jobeet_category_affiliate` (
  `category_id` INT NOT NULL COMMENT 'カテゴリID' ,
  `affiliate_id` INT NOT NULL COMMENT 'アフィリエイトID' ,
  PRIMARY KEY (`category_id`, `affiliate_id`) ,
  INDEX `fk_category` (`category_id` ASC) ,
  INDEX `fk_affiliate` (`affiliate_id` ASC) ,
  CONSTRAINT `fk_category`
    FOREIGN KEY (`category_id` )
    REFERENCES `jobeet`.`jobeet_category` (`id` )
    ON DELETE CASCADE
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_affiliate`
    FOREIGN KEY (`affiliate_id` )
    REFERENCES `jobeet`.`jobeet_affiliate` (`id` )
    ON DELETE CASCADE
    ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = 'カテゴリ-アフィリエイト';



SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

schema.ymlの編集

かなり道を外れてしまったので、もとに戻ります。
チュートリアルでは、データベースモデルをYAML形式で作成した後、PHPモデル、DBのDDLを作るという順序で
DB周りの設定をしようとしています。
チュートリアルのschema.ymlは、以下のようになっています。

# config/schema.yml
propel:
  jobeet_category:
    id:           ~
    name:         { type: varchar(255), required: true, index: unique }
 
  jobeet_job:
    id:           ~
    category_id:  { type: integer, foreignTable: jobeet_category, foreignReference: id, required: true }
    type:         { type: varchar(255) }
    company:      { type: varchar(255), required: true }
    logo:         { type: varchar(255) }
    url:          { type: varchar(255) }
    position:     { type: varchar(255), required: true }
    location:     { type: varchar(255), required: true }
    description:  { type: longvarchar, required: true }
    how_to_apply: { type: longvarchar, required: true }
    token:        { type: varchar(255), required: true, index: unique }
    is_public:    { type: boolean, required: true, default: 1 }
    is_activated: { type: boolean, required: true, default: 0 }
    email:        { type: varchar(255), required: true }
    expires_at:   { type: timestamp, required: true }
    created_at:   ~
    updated_at:   ~
 
  jobeet_affiliate:
    id:           ~
    url:          { type: varchar(255), required: true }
    email:        { type: varchar(255), required: true, index: unique }
    token:        { type: varchar(255), required: true }
    is_active:    { type: boolean, required: true, default: 0 }
    created_at:   ~
 
  jobeet_category_affiliate:
    category_id:  { type: integer, foreignTable: jobeet_category, foreignReference: id, required: true, primaryKey: true, onDelete: cascade }
    affiliate_id: { type: integer, foreignTable: jobeet_affiliate, foreignReference: id, required: true, primaryKey: true, onDelete: cascade }
 

schema.yml から DDLスクリプトを作成するタスクを実行するには、以下のようなコマンドを打ちます。

symfony propel:build-sql
 

出来上がったDDLスクリプトは、以下のファイルになります。

# This is a fix for InnoDB in MySQL >= 4.1.x
# It "suspends judgement" for fkey relationships until are tables are set.
SET FOREIGN_KEY_CHECKS = 0;

#-----------------------------------------------------------------------------
#-- jobeet_category
#-----------------------------------------------------------------------------

DROP TABLE IF EXISTS `jobeet_category`;


CREATE TABLE `jobeet_category`
(
	`id` INTEGER  NOT NULL AUTO_INCREMENT,
	`name` VARCHAR(255)  NOT NULL,
	PRIMARY KEY (`id`),
	UNIQUE KEY `jobeet_category_U_1` (`name`)
)Type=InnoDB;

#-----------------------------------------------------------------------------
#-- jobeet_job
#-----------------------------------------------------------------------------

DROP TABLE IF EXISTS `jobeet_job`;


CREATE TABLE `jobeet_job`
(
	`id` INTEGER  NOT NULL AUTO_INCREMENT,
	`category_id` INTEGER  NOT NULL,
	`type` VARCHAR(255),
	`company` VARCHAR(255)  NOT NULL,
	`logo` VARCHAR(255),
	`url` VARCHAR(255),
	`position` VARCHAR(255)  NOT NULL,
	`location` VARCHAR(255)  NOT NULL,
	`description` TEXT  NOT NULL,
	`how_to_apply` TEXT  NOT NULL,
	`token` VARCHAR(255)  NOT NULL,
	`is_public` TINYINT default 1 NOT NULL,
	`is_activated` TINYINT default 0 NOT NULL,
	`email` VARCHAR(255)  NOT NULL,
	`expires_at` DATETIME  NOT NULL,
	`created_at` DATETIME,
	`updated_at` DATETIME,
	PRIMARY KEY (`id`),
	UNIQUE KEY `jobeet_job_U_1` (`token`),
	INDEX `jobeet_job_FI_1` (`category_id`),
	CONSTRAINT `jobeet_job_FK_1`
		FOREIGN KEY (`category_id`)
		REFERENCES `jobeet_category` (`id`)
)Type=InnoDB;

#-----------------------------------------------------------------------------
#-- jobeet_affiliate
#-----------------------------------------------------------------------------

DROP TABLE IF EXISTS `jobeet_affiliate`;


CREATE TABLE `jobeet_affiliate`
(
	`id` INTEGER  NOT NULL AUTO_INCREMENT,
	`url` VARCHAR(255)  NOT NULL,
	`email` VARCHAR(255)  NOT NULL,
	`token` VARCHAR(255)  NOT NULL,
	`is_active` TINYINT default 0 NOT NULL,
	`created_at` DATETIME,
	PRIMARY KEY (`id`),
	UNIQUE KEY `jobeet_affiliate_U_1` (`email`)
)Type=InnoDB;

#-----------------------------------------------------------------------------
#-- jobeet_category_affiliate
#-----------------------------------------------------------------------------

DROP TABLE IF EXISTS `jobeet_category_affiliate`;


CREATE TABLE `jobeet_category_affiliate`
(
	`category_id` INTEGER  NOT NULL,
	`affiliate_id` INTEGER  NOT NULL,
	PRIMARY KEY (`category_id`,`affiliate_id`),
	CONSTRAINT `jobeet_category_affiliate_FK_1`
		FOREIGN KEY (`category_id`)
		REFERENCES `jobeet_category` (`id`)
		ON DELETE CASCADE,
	INDEX `jobeet_category_affiliate_FI_2` (`affiliate_id`),
	CONSTRAINT `jobeet_category_affiliate_FK_2`
		FOREIGN KEY (`affiliate_id`)
		REFERENCES `jobeet_affiliate` (`id`)
		ON DELETE CASCADE
)Type=InnoDB;

# This restores the fkey checks, after having unset them earlier
SET FOREIGN_KEY_CHECKS = 1;
 

symfonyが要求するスキーマ定義

MySQL Workbenchで作成した[jobeet.sql]と[lib.model.schema.sql]を比較して判ったこと

 
  • idカラムは、NOT NULL制約を付け、AUTO_INCREMENTを付ける
  • created_atカラムと、updated_atカラムは、NOT NULL制約がつかず、DATETIME型で作られる
  • BOOL型(BOOLEAN型)のカラムは、TINYINT型で代替される
  • コメントは消える
 

propel:insert-sql タスクを実行すると、[lib.model.schema.sql]で定義されたDDLでスキーマーが上書き、保存されてしまいます。
もちろん、スキーマの情報が消えるという警告は出ます。
とはいえ、propel:insert-sqlは実行する可能性が高く、[lib.model.schema.sql]と[jobeet.sql]が不一致である点はいただけません。

 

このため、RAD開発を維持するため、外部定義のDDLは、symfonyが想定するDDL定義を同一にする必要があります。

 

ということで、物理モデルを修正してみました。

Sym_38.png

作成した物理モデルです。

新しいDDLスクリプトです。

これにより、ほとんど一緒になります。

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

CREATE SCHEMA IF NOT EXISTS `jobeet` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `jobeet`;

-- -----------------------------------------------------
-- Table `jobeet`.`jobeet_category`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `jobeet`.`jobeet_category` (
  `id` INT NOT NULL AUTO_INCREMENT COMMENT 'ID' ,
  `name` VARCHAR(255) NOT NULL COMMENT 'カテゴリ名' ,
  PRIMARY KEY (`id`) ,
  UNIQUE INDEX `uk_name` USING BTREE (`name` ASC) )
ENGINE = InnoDB
COMMENT = 'カテゴリ';


-- -----------------------------------------------------
-- Table `jobeet`.`jobeet_job`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `jobeet`.`jobeet_job` (
  `id` INT NOT NULL AUTO_INCREMENT COMMENT 'ID' ,
  `category_id` INT NOT NULL COMMENT 'カテゴリID' ,
  `type` VARCHAR(255) NULL COMMENT '契約条件' ,
  `company` VARCHAR(255) NOT NULL COMMENT '企業名' ,
  `logo` BLOB NULL COMMENT 'ロゴ' ,
  `url` VARCHAR(255) NULL COMMENT 'URL' ,
  `position` VARCHAR(255) NOT NULL COMMENT '業務' ,
  `location` VARCHAR(255) NOT NULL COMMENT '就業場所' ,
  `description` TEXT NOT NULL COMMENT '仕事の説明' ,
  `how_to_apply` TEXT NOT NULL COMMENT '応募方法' ,
  `token` VARCHAR(255) NOT NULL COMMENT 'トークンキー' ,
  `is_public` TINYINT NOT NULL DEFAULT 1 COMMENT '公開' ,
  `is_activated` TINYINT NOT NULL DEFAULT 0 COMMENT '有効' ,
  `email` VARCHAR(255) NOT NULL COMMENT 'E-Mail' ,
  `expires_at` DATETIME NOT NULL COMMENT '有効期限' ,
  `created_at` DATETIME NULL COMMENT '作成日時' ,
  `updated_at` DATETIME NULL COMMENT '更新日時' ,
  PRIMARY KEY (`id`) ,
  UNIQUE INDEX `uk_token` USING BTREE (`token` ASC) ,
  INDEX `fk_category` (`category_id` ASC) ,
  CONSTRAINT `fk_category`
    FOREIGN KEY (`category_id` )
    REFERENCES `jobeet`.`jobeet_category` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = '求人';


-- -----------------------------------------------------
-- Table `jobeet`.`jobeet_affiliate`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `jobeet`.`jobeet_affiliate` (
  `id` INT NOT NULL AUTO_INCREMENT COMMENT 'ID' ,
  `url` VARCHAR(255) NOT NULL COMMENT 'URL' ,
  `email` VARCHAR(255) NOT NULL COMMENT 'E-Mail' ,
  `token` VARCHAR(255) NOT NULL COMMENT 'トークンキー' ,
  `is_active` TINYINT NOT NULL DEFAULT 0 COMMENT '有効' ,
  `created_at` DATETIME NULL COMMENT '作成日時' ,
  PRIMARY KEY (`id`) ,
  UNIQUE INDEX `uk_affiliate` USING BTREE (`email` ASC) )
ENGINE = InnoDB
COMMENT = 'アフィリエイト';


-- -----------------------------------------------------
-- Table `jobeet`.`jobeet_category_affiliate`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `jobeet`.`jobeet_category_affiliate` (
  `category_id` INT NOT NULL COMMENT 'カテゴリID' ,
  `affiliate_id` INT NOT NULL COMMENT 'アフィリエイトID' ,
  PRIMARY KEY (`category_id`, `affiliate_id`) ,
  INDEX `fk_category` (`category_id` ASC) ,
  INDEX `fk_affiliate` (`affiliate_id` ASC) ,
  CONSTRAINT `fk_category_affiate_category`
    FOREIGN KEY (`category_id` )
    REFERENCES `jobeet`.`jobeet_category` (`id` )
    ON DELETE CASCADE
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_category_affiate_affiliate`
    FOREIGN KEY (`affiliate_id` )
    REFERENCES `jobeet`.`jobeet_affiliate` (`id` )
    ON DELETE CASCADE
    ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = 'カテゴリ-アフィリエイト';



SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
 

データベース接続

データベースに、ユーザーとスキーマを作成します。
チュートリアルでは、rootでログインしていますが、アプリケーション用のユーザーを作成するのが一般的です。
MySQL Administratorで、[jobeet]ユーザーを作ってみました。
ユーザー名とパスワードは同一です。(公開していないので、パスワードを公開しても大丈夫です。) http://www.techch.com/wikiparts/Sym_39.png

 

symfonyにJobeetプロジェクト用にこのデータベースを使うことを伝えます。

symfony configure:database "mysql:host=localhost;dbname=jobeet" jobeet jobeet

これにより、config/databases.yml ファイルが以下のように更新されます。

dev:
  propel:
    param:
      classname: DebugPDO
test:
  propel:
    param:
      classname: DebugPDO
all:
  propel:
    class: sfPropelDatabase
    param:
      classname: PropelPDO
      dsn: 'mysql:host=localhost;dbname=jobeet'
      username: jobeet
      password: jobeet
      encoding: utf8
      persistent: true
      pooling: true

データベースへの接続情報が設定されます。

スキーマの作成

[lib.model.schema.sql]を使って、MySQLの[jobeet]スキーマに、DDLを流してスキーマを構成します。
以下のコマンドを投入します。

 symfony propel:insert-sql

このようにスキーマが構成されました。
http://www.techch.com/wikiparts/Sym_40.png

 

ORMによるORの作成

symfonyには、2つのORM(PropelとDoctrine)がビルトインされています。
ここでは、PropelというORM(O/R Mapper)を使用して、テーブルレコードをオブジェクトにマッピングするPHPクラスを作ります。

 

以下のコマンドを入力します。

symfony propel:build-model

すると、/lib/model のディレクトリに、20個のPHPクラスが作成されます。
テーブル単位に4つのクラスとチュートリアルに書かれていますが、実際には5つファイルが作成されます。

 

チュートリアルは、[jobeet_job]テーブルについての解説をしていますので、確認してみます。

 

作成されるモデルのクラス図を描いてみました。
クラスのパッケージの図について、うそが書かれていますが、正確に書くとごちゃごちゃしてしまうため、あえて間違って書いています。

 
Sym_41.png
 

lib.model.omの中で定義されているクラスは、フレームワークが定義する部分であるため、修正することはできません。
クラスを拡張したい場合には、派生クラスからオーバーライドする必要があります。

 

BaseObjectは、ライブラリに含まれているため、実際には、このパッケージには含まれていません。
BaseJobeetJobは抽象クラスで、Persistentインタフェースを実装しています。
抽象クラスであるため、かならず、派生クラスを作る必要があります。
そのクラスが[JobeetJob]クラスになります。

 

Persistentインタフェースは、DBの永続化するために実装しなければならない永続化インタフェースです。
PropelのHPページは、以下のURLになります。
http://propel.phpdb.org/trac/

 

BaseObject

http://propel.phpdb.org/docs/api/current/runtime/propel-om/_om---BaseObject.php.html

 

BaseObjectクラスの詳細です。

 
No名前種類可視性
1$modifiedColumnsClass Variablesprotected
2equals()Class Methodspublic
3getModifiedColumns()
4hashCode()
5isColumnModified()
6isDeleted()
7isModified()
8isNew()
9log()protected
10resetModified()public
11setDeleted()
12setNew()

Persistent

http://propel.phpdb.org/docs/api/current/runtime/propel-om/Persistent.html

 

Persistentインタフェースの詳細です。

 
No名前種類可視性
1delete()Class Methodspublic
2getPrimaryKey()
3isColumnModified()
4isDeleted()
5isModified()
6isNew()
7resetModified()
8save()
9setDeleted()
10setNew()
11setPrimaryKey()

BaseJobeetJob

BaseJobeetJob抽象クラスの詳細です。

No名前種類可視性
1$peerClass Variablesprotected
2$id
3$category_id
4$type
5$company
6$logo
7$url
8$position
9$location
10$description
11$how_to_apply
12$token
13$is_public
14$is_activated
15$email
16$expires_at
17$created_at
18$updated_at
19$aJobeetCategory
20$alreadyInSave
21$alreadyInValidation
22__construct()Class Methodspublic
23applyDefaultValues()
24getId()
25getCategoryId()
26getType()
27getCompany()
28getLogo()
29getUrl()
30getPosition()
31getLocation()
32getDescription()
33getHowToApply()
34getToken()
35getIsPublic()
36getIsActivated()
37getEmail()
38getExpiresAt()
39getCreatedAt()
40getUpdatedAt()
41setId()
42setCategoryId()
43setType()
44setCompany()
45setLogo()
46setUrl()
47setPosition()
48setLocation()
49setDescription()
50setHowToApply()
51setToken()
52setIsPublic()
53setIsActivated()
54setEmail()
55setExpiresAt()
56setCreatedAt()
57setUpdatedAt()
58hasOnlyDefaultValues()
59hydrate()
60ensureConsistency()
61reload()
62delete()
63save()
64doSave()protected
65$validationFailureClass Variablesprotected
66getValidationFailuresy()Class Methodspublic
67validate()
68doValidate()protected
69getByName()public
70getByPosition()
71toArray()
72setByName()
73setByPosition()
74fromArray()
75buildCriteria()
76buildPkeyCriteria()
77getPrimaryKey()
78setPrimaryKey()
79copyInto()
80copy()
81getPeer()
82setJobeetCategory()
83getJobeetCategory()
84clearAllReferences()
85__call()

BaseJobeetJobPeer

BaseJobeetJobPeer抽象クラスの詳細です。

No名前種類可視性
1$instancesClass Variablespublic
2getMapBuilder()Class Methodspublic
3translateFieldName()
4getFieldNames()
5alias()
6addSelectColumns()
7doCount()
8doSelectOne()
9doSelect()
10doSelectStmt()
11addInstanceToPool()
12removeInstanceFromPool()
13getInstanceFromPool()
14clearInstancePool()
15getPrimaryKeyHashFromRow()
16populateObjects()
17doCountJoinJobeetCategory()
18doSelectJoinJobeetCategory()
19doCountJoinAll()
20doSelectJoinAll()
21getUniqueColumnNames()
22getOMClass()
23doInsert()
24doUpdate()
25doDeleteAll()
26doDelete()
27doValidate()
28retrieveByPK()
29retrieveByPKs()
 

これらの資料をみると、あぁ、いろいろ便利に定義されているなと関心に思えます。

初期データ

2つのファイルを作成しました。
[010_categories.yml]と[020_jobs.yml]です。
このファイルを /data/fixturesのディレクトリに格納します。

 

そして、このコマンドを投入します。

symfony propel:data-load

データがこのように格納されました。Rowsが増えているのが判ります。
http://www.techch.com/wikiparts/Sym_42.png

 

CRUDアプリケーションの作成

テーブルに対するCRUD(Create/Read/Update/Delete)アプリケーションを自動で作成するタスクが、symfonyには組みつけられています。
以下のコマンドを投入します。

symfony propel:generate-module --with-show --non-verbose-templates frontend job JobeetJob
symfony propel:generate-module --with-show --non-verbose-templates frontend category JobeetCategory
symfony propel:generate-module --with-show --non-verbose-templates frontend affiliate JobeetAffiliate

これにより、[jobeet_job]、[jobeet_category]、[jobeet_affiliate]のテーブルを編集するモジュール
[job]、[category]、[affiliate]の3つ作成されます。

 

以下のURLにアクセスし、実際に動作させたアプリのキャプチャが以下のとおりです。
http://jobeet.localhost/frontend_dev.php/job
http://www.techch.com/wikiparts/Sym_43.png

 

アプリは、エディットしようとすると例外が発生します。__toString()メソッドを実装しなさいといいます。
http://www.techch.com/wikiparts/Sym_44.png

 

チュートリアルの指示通りに修正すると、以下のように動作するようになりました。
http://www.techch.com/wikiparts/Sym_45.png

 

チュートリアルのキャプチャの状況をみると、MaxOS Xで開発をしているようです。
MaxOS Xは、FreeBSDに良く似た[Darwin]というOSをベースにしており、ほぼUNIX系のOSとみなせます。

最後に

CRUDアプリケーションをRAD的に作成することができることが確認できました。

 

以上です。

 
最新の10件
2010-07-09 2010-07-08 2010-07-07 2010-06-29 2010-06-28
人気の20件
Counter: 393, today: 1, yesterday: 0

添付ファイル: filejobeet2.sql 29件 [詳細] filejobeet2.mwb 22件 [詳細] filejobeet.sql 39件 [詳細] filelib.model.schema.sql 41件 [詳細] filejobeet.mwb 30件 [詳細] filejobeet-loginal.mwb 39件 [詳細]