*

[CakePHP]bakeコマンドでModelを作る

公開日: : 最終更新日:2014/12/22 CakePHP

CakePHP関連まとめページはこちら。

bakeコマンドを使う

チュートリアルとか本とか読んでたんですが、bakeコマンドを使ってモデルを作りますだの、bakeコマンドを使ってControllerを使いますだの、書いてあるんですが、
肝心のbakeコマンドの実行方法が書いてないんです。

なのでその備忘録です。
クリスマスも近いですし、bakeでケーキを焼き上げましょう!

Userテーブルに基づいたModel作成

テーブルを作成

とりあえずテーブルに従って作成するのでテーブルを作成しておく必要があります。
今回は以下のテーブルです。

CREATE TABLE  <code>[データベース名]</code>.<code>users</code> (
<code>id</code> INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
<code>username</code> VARCHAR( 50 ) NOT NULL ,
<code>password</code> VARCHAR( 255 ) NOT NULL ,
<code>role</code> VARCHAR( 20 ) NOT NULL ,
<code>created</code> DATETIME NULL DEFAULT NULL ,
<code>modified</code> DATETIME NULL DEFAULT NULL
) ENGINE = INNODB;

Bakeで焼き上げる

とりあえずSSHでサーバに接続します。

ディレクトリをケーキのところまで移動します。
(↓のPathはさくらインターネットの場合です)

% cd /home/[user名]/www/[cakeの名前]

そしてbakeコマンドを実行します。

% php lib/Cake/Console/cake.php bake

こんな感じに返事が来ればOK。

Welcome to CakePHP v2.5.6 Console
---------------------------------------------------------------
App : app
Path: /home/[user名]/www/[cakeの名前]/app/
---------------------------------------------------------------
Interactive Bake Shell
---------------------------------------------------------------
[D]atabase Configuration
[M]odel
[V]iew
[C]ontroller
[P]roject
[F]ixture
[T]est case
[Q]uit
What would you like to Bake? (D/M/V/C/P/F/T/Q) 

Modelを作成

---------------------------------------------------------------
App : app
Path: /home/[user名]/www/[cakeの名前]/app/
---------------------------------------------------------------
Interactive Bake Shell
---------------------------------------------------------------
[D]atabase Configuration
[M]odel
[V]iew
[C]ontroller
[P]roject
[F]ixture
[T]est case
[Q]uit
What would you like to Bake? (D/M/V/C/P/F/T/Q) 
> M

Modelを作成するので「M」を入力。

---------------------------------------------------------------
Bake Model
Path: /home/[user名]/www/[cakeの名前]/app/Model/
---------------------------------------------------------------
Possible Models based on your current database:
1. Post
2. User
Enter a number from the list above,
type in the name of another model, or 'q' to exit  
[q] > 2

現在のテーブルが出てきたので、今回設定するUserの「2」を選択。

A displayField could not be automatically detected
would you like to choose one? (y/n) 
> y

表示するフィールドが自動的に検出されなかったので、選びますか? とのことなので、yと返事。

1. id
2. username
3. password
4. role
5. created
6. modified
Choose a field from the options above:  
> 1

idの設定をします、ということで1と返事。

Would you like to supply validation criteria 
for the fields in your model? (y/n) 
[y] > y

validationの設定をしますか? はい、やります。

Field: id
Type: integer
---------------------------------------------------------------
Please select one of the following validation options:
---------------------------------------------------------------
 1. alphaNumeric               18. maxLength
 2. between                    19. mimeType
 3. blank                      20. minLength
 4. boolean                    21. money
 5. cc                         22. multiple
 6. comparison                 23. naturalNumber
 7. custom                     24. notEmpty
 8. date                       25. numeric
 9. datetime                   26. phone
10. decimal                    27. postal
11. email                      28. range
12. equalTo                    29. ssn
13. extension                  30. time
14. fileSize                   31. uploadError
15. inList                     32. url
16. ip                         33. userDefined
17. luhn                       34. uuid

35 - Do not do any validation on this field.
---------------------------------------------------------------
or enter in a valid regex validation string.
Alternatively [s] skip the rest of the fields.
  
[35] > 25

Would you like to add another validation rule
or skip the rest of the fields? (y/n/s) 
[n] > 

idは数字でなので、25のnumericを選択。
ほかに特に設定事項はないので[n]のところでそのままEnterをし、n入力。

Field: username
Type: string
---------------------------------------------------------------
Please select one of the following validation options:
---------------------------------------------------------------
 1. alphaNumeric               18. maxLength
 2. between                    19. mimeType
 3. blank                      20. minLength
 4. boolean                    21. money
 5. cc                         22. multiple
 6. comparison                 23. naturalNumber
 7. custom                     24. notEmpty
 8. date                       25. numeric
 9. datetime                   26. phone
10. decimal                    27. postal
11. email                      28. range
12. equalTo                    29. ssn
13. extension                  30. time
14. fileSize                   31. uploadError
15. inList                     32. url
16. ip                         33. userDefined
17. luhn                       34. uuid

35 - Do not do any validation on this field.
---------------------------------------------------------------
or enter in a valid regex validation string.
Alternatively [s] skip the rest of the fields.
  
[24] > 24
Would you like to add another validation rule
or skip the rest of the fields? (y/n/s) 
[n] > 

usernameは入ってさえいればいいので、notEmptyの24を指定。

Field: password
Type: string
---------------------------------------------------------------
Please select one of the following validation options:
---------------------------------------------------------------
 1. alphaNumeric               18. maxLength
 2. between                    19. mimeType
 3. blank                      20. minLength
 4. boolean                    21. money
 5. cc                         22. multiple
 6. comparison                 23. naturalNumber
 7. custom                     24. notEmpty
 8. date                       25. numeric
 9. datetime                   26. phone
10. decimal                    27. postal
11. email                      28. range
12. equalTo                    29. ssn
13. extension                  30. time
14. fileSize                   31. uploadError
15. inList                     32. url
16. ip                         33. userDefined
17. luhn                       34. uuid

35 - Do not do any validation on this field.
---------------------------------------------------------------
or enter in a valid regex validation string.
Alternatively [s] skip the rest of the fields.
  
[24] > 24
Would you like to add another validation rule
or skip the rest of the fields? (y/n/s) 
[n] > 

usernameと同様ですね。

Field: role
Type: string
---------------------------------------------------------------
Please select one of the following validation options:
---------------------------------------------------------------
 1. alphaNumeric               18. maxLength
 2. between                    19. mimeType
 3. blank                      20. minLength
 4. boolean                    21. money
 5. cc                         22. multiple
 6. comparison                 23. naturalNumber
 7. custom                     24. notEmpty
 8. date                       25. numeric
 9. datetime                   26. phone
10. decimal                    27. postal
11. email                      28. range
12. equalTo                    29. ssn
13. extension                  30. time
14. fileSize                   31. uploadError
15. inList                     32. url
16. ip                         33. userDefined
17. luhn                       34. uuid

35 - Do not do any validation on this field.
---------------------------------------------------------------
or enter in a valid regex validation string.
Alternatively [s] skip the rest of the fields.
  
[24] > 24
Would you like to add another validation rule
or skip the rest of the fields? (y/n/s) 
[n] > 

rollも同様。

Field: created
Type: datetime
---------------------------------------------------------------
Please select one of the following validation options:
---------------------------------------------------------------
 1. alphaNumeric               18. maxLength
 2. between                    19. mimeType
 3. blank                      20. minLength
 4. boolean                    21. money
 5. cc                         22. multiple
 6. comparison                 23. naturalNumber
 7. custom                     24. notEmpty
 8. date                       25. numeric
 9. datetime                   26. phone
10. decimal                    27. postal
11. email                      28. range
12. equalTo                    29. ssn
13. extension                  30. time
14. fileSize                   31. uploadError
15. inList                     32. url
16. ip                         33. userDefined
17. luhn                       34. uuid

35 - Do not do any validation on this field.
---------------------------------------------------------------
or enter in a valid regex validation string.
Alternatively [s] skip the rest of the fields.
  
[35] > 9
Would you like to add another validation rule
or skip the rest of the fields? (y/n/s) 
[n] > 

createdはdatetimeを指定する9を選択。

Field: modified
Type: datetime
---------------------------------------------------------------
Please select one of the following validation options:
---------------------------------------------------------------
 1. alphaNumeric               18. maxLength
 2. between                    19. mimeType
 3. blank                      20. minLength
 4. boolean                    21. money
 5. cc                         22. multiple
 6. comparison                 23. naturalNumber
 7. custom                     24. notEmpty
 8. date                       25. numeric
 9. datetime                   26. phone
10. decimal                    27. postal
11. email                      28. range
12. equalTo                    29. ssn
13. extension                  30. time
14. fileSize                   31. uploadError
15. inList                     32. url
16. ip                         33. userDefined
17. luhn                       34. uuid

35 - Do not do any validation on this field.
---------------------------------------------------------------
or enter in a valid regex validation string.
Alternatively [s] skip the rest of the fields.
  
[35] > 9
Would you like to add another validation rule
or skip the rest of the fields? (y/n/s) 
[n] > 

modifiedも同上。

Would you like to define model associations
(hasMany, hasOne, belongsTo, etc.)? (y/n) 
[y] > n

テーブルの関係を設定するか、ということなので、usersには親も子も今のところはないので、nを選択。

---------------------------------------------------------------
The following Model will be created:
---------------------------------------------------------------
Name:       User
DB Table:   <code>[データベース名]</code>.<code>users</code>
Validation: Array
(
    [id] =&gt; Array
        (
            [numeric] =&gt; numeric
        )

    [username] =&gt; Array
        (
            [notEmpty] =&gt; notEmpty
        )

    [password] =&gt; Array
        (
            [notEmpty] =&gt; notEmpty
        )

    [role] =&gt; Array
        (
            [notEmpty] =&gt; notEmpty
        )

    [created] =&gt; Array
        (
            [datetime] =&gt; datetime
        )

    [modified] =&gt; Array
        (
            [datetime] =&gt; datetime
        )

)

---------------------------------------------------------------
Look okay? (y/n) 
[y] &gt; y

こんな感じでいい? と聞かれたのでyと返事。

Baking model class for User...

Creating file /home/[user名]/www/[cakeの名前]/app/Model/User.php
Wrote <code>/home/[user名]/www/[cakeの名前]/app/Model/User.php</code>
PHPUnit is not installed. Do you want to bake unit test files anyway? (y/n) 
[y] &gt; y

なんかPHPUnitってのが必要らしい。yでインストールを許可

You can download PHPUnit from http://phpunit.de

Baking test fixture for User...

Creating file /home/[user名]/www/[cakeの名前]/app/Test/Fixture/UserFixture.php
Wrote <code>/home/[user名]/www/[cakeの名前]/app/Test/Fixture/UserFixture.php</code>
Bake is detecting possible fixtures...

Baking test case for User Model ...

Creating file /home/[user名]/www/[cakeの名前]/app/Test/Case/Model/UserTest.php
Wrote <code>/home/[user名]/www/[cakeの名前]/app/Test/Case/Model/UserTest.php</code>

というわけで焼きあがったようです。

焼き上がりを確認

早速ディレクトリを確認してみると、app/Model/の中にUser.phpが存在しています。
内容を見てみます。

焼きあがったソース

<?php
App::uses('AppModel', 'Model');
/**
 * User Model
 *
 */
class User extends AppModel {

/**
 * Display field
 *
 * @var string
 */
	public $displayField = 'id';

/**
 * Validation rules
 *
 * @var array
 */
	public $validate = array(
		'id' => array(
			'numeric' => array(
				'rule' => array('numeric'),
				//'message' => 'Your custom message here',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'username' => array(
			'notEmpty' => array(
				'rule' => array('notEmpty'),
				//'message' => 'Your custom message here',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'password' => array(
			'notEmpty' => array(
				'rule' => array('notEmpty'),
				//'message' => 'Your custom message here',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'role' => array(
			'notEmpty' => array(
				'rule' => array('notEmpty'),
				//'message' => 'Your custom message here',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'created' => array(
			'datetime' => array(
				'rule' => array('datetime'),
				//'message' => 'Your custom message here',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'modified' => array(
			'datetime' => array(
				'rule' => array('datetime'),
				//'message' => 'Your custom message here',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
	);
}

おおー、便利。
あとからカスタマイズしやすいように、コメントでいろいろ追加されていますね。
正直使い方がわからなかったから敬遠していたけど、テーブル作成直後にとりあえず実行してみるべきかもしれません。
次はコントローラを作ってみよう。

ad

関連記事

Wannabenote

[CakePHP]SNSを作ろう ブログ編5~編集画面作成~

SNSを作ろうまとめページはこちら CakePHPで閲覧画面を作った続きです。 投稿を手軽に

記事を読む

cakephp

[CakePHP, jQuery]Ajaxでメッセージをゆっくり消す

SNS作りをさぼってるわけじゃないんですよ。 作るだけなら簡単だけど、ブログにまとめる時間がないだ

記事を読む

Wannabenote

[CakePHP]bakeコマンドでViewを作る

CakePHP関連まとめページはこちら。 最後はViewを焼いてみます。 Viewを焼き上げ

記事を読む

Wannabenote

[CakePHP]SNSを作ろう CakePHPインストール編

SNSを作ろうまとめページはこちら はい。こないだのsymfonyはなかったことにします。

記事を読む

Wannabenote

[CakePHP]SNSを作ろう ブログ編

SNSを作ろうまとめページはこちら。 前回の続き。 さて、私が今作りたいのはブログがメイ

記事を読む

Wannabenote

[CakePHP]SyntaxHighlighterを利用する

ソースを綺麗に表示する このサイトでも利用しているのですが、ソースを表示して、かつ予約語などを別色

記事を読む

logo

[CakePHP]bakeコマンドでControllerを対話形式で焼き上げる

基本の三種は焼きあがったのだけど 焼きあがったんですが、Controllerのソースがscaffo

記事を読む

Wannabenote

[CakePHP]ログアウトすると権限が必要と表示される

ちょっと時間は前後しますが、ログイン機能を作ったあとの話です。 チュートリアル通りに進めても、

記事を読む

Wannabenote

[CakePHP]SNSを作ろう ブログ編4~閲覧画面作成~

SNSを作ろうまとめページはこちら→SNSを作ろうまとめページ SNSを作ろう ブログ編3~投

記事を読む

Wannabenote

[PHPStorm]SNSを作ろう IDE環境作成編

SNSを作ろうまとめページはこちら。 前回の続き、というか閑話休題。 プログラムをガチで

記事を読む

ad

Message

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

ad

  •  Auther;わなび

     「オープン系得意だよね? 俺のPCの調子悪いんだけど」という無茶振りから解き放たれゲームエンジニアに。
    C#とかUnityを扱います。
    Twitterフォロー大歓迎です。
    githubアカウント→wannabenote
  • follow us in feedly
PAGE TOP ↑