2012-05-01 55 views
2

當我編寫CakePHP應用程序時,我的一個常見任務是輸出一個SQL文件並在運行烘焙生成一些腳手架之前將其寫入數據庫。這是我在CakePHP中遇到的極少數抱怨之一 - 這樣做會將我與MySQL關聯起來,我想知道是否有更好的方法通過代碼實現它。例如,在一些框架中,我可以定義我的模型與數據類型一起使用的列等,然後通過管理界面運行命令,以根據代碼中顯示的內容「構建」數據庫。它將在任何數據庫位於框架之後執行此操作。CakePHP可以根據Model的_schema屬性生成我的數據庫表嗎?

CakePHP 2.x可以做這樣的事嗎?我想在我的Model代碼中寫出數據庫模式,並運行一個像烘焙一樣的命令來自動生成我需要的表和列。潛入菜譜文檔後,_schema attribute似乎做我想做的事:

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

但有沒有例子解釋什麼,我會從我那裏做。 _schema屬性是否有不同的用途?任何幫助,將不勝感激!

回答

9

不是從你的$ _schema數組本身。但在/ APP/Config/Schema中創建並使用模式文件schema.php

然後,您可以運行烘焙命令「cake schema 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... 
} 
+0

如何運行控制器烘烤命令? – Anupal

+0

從您的控制檯目錄中運行。 –

+1

不,永遠不要那樣做。總是從你的應用程序目錄,相對:在2.x控制檯/蛋糕。和3.x中的bin/cake(如文檔所述)。 – mark

相關問題