2

CakePHPアプリケーションを作成するときの一般的なタスクは、ベイクを実行してスキャフォールドを生成する前に、SQLファイルを入力してデータベースに書き込むことです。これは私がCakePHPで持っている数少ない不満の1つです-これを行うとMySQLに結びつき、コードを介してそれを行うためのより良い方法があるかどうか疑問に思います。例として、一部のフレームワークでは、モデルが使用する列をデータ型などとともに定義し、管理インターフェイスを介してコマンドを実行して、コードに表示されている内容に基づいてデータベースを「構築」できます。これは、フレームワークの背後にあるデータベースで実行されます。

CakePHP 2.xがこのようなことをする方法はありますか?モデルコードでデータベーススキーマを書き出し、bakeなどのコマンドを実行して、必要なテーブルと列を自動的に生成したいと思います。クックブックのドキュメントに飛び込んだ後、_schema属性は私がやりたいことを実行しているようです。

class Post{
  public $_schema = array(
    'title' => array('type'=>'text'),
    'description' => array('type'=>'text'),
    'author' => array('type'=>'text')
  );
}

しかし、そこから私が何をするかを説明する例はありません。_schema属性は別の目的を果たしますか?どんな助けでもいただければ幸いです!

4

1 に答える 1

9

$_schema配列自体からではありません。schema.phpただし、/ APP / Config/Schemaでスキーマファイルを作成して使用します。

次に、ベイクコマンド「cakeschema create」を実行すると、「スキーマファイルに基づいてテーブルをドロップして作成」します。

私はそれからこのように見えるかもしれません:

class YourSchema extends CakeSchema {

    public $addresses = array(
        'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'primary'),
        'contact_id' => array('type' => 'integer', 'null' => false, 'default' => '0', 'length' => 10),
        'type' => array('type' => 'integer', 'null' => false, 'default' => '0', 'length' => 2),
        'status' => array('type' => 'integer', 'null' => false, 'default' => '0', 'length' => 2),
        'email' => array('type' => 'string', 'null' => false, 'default' => NULL, 'length' => 50, 'collate' => 'utf8_unicode_ci', 'comment' => 'redundant', 'charset' => 'utf8'),
        'created' => array('type' => 'datetime', 'null' => false, 'default' => NULL),
        'modified' => array('type' => 'datetime', 'null' => false, 'default' => NULL),
        'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)),
        'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_unicode_ci', 'engine' => 'MyISAM')
    )

    // more tables...
}
于 2012-05-01T10:47:46.233 に答える