CakePHP可以从模型上的_schema属性生成我的数据库表吗?

CakePHP可以从模型上的_schema属性生成我的数据库表吗?,php,mysql,database,cakephp,Php,Mysql,Database,Cakephp,在编写CakePHP应用程序时,我的一项常见任务是键入一个SQL文件,并在运行bake生成一些脚手架之前将其写入数据库。这是我对CakePHP的少数抱怨之一——这样做将我与MySQL联系在一起,我想知道是否有更好的方法通过代码来实现这一点。例如,在某些框架中,我可以定义模型与数据类型一起使用的列,然后通过管理界面运行命令,根据代码中显示的内容“构建”数据库。它将在框架后面的任何数据库上执行此操作 有没有办法让CakePHP2.x做这样的事情?我想在模型代码中写出数据库模式,并运行bake之类的命

在编写CakePHP应用程序时,我的一项常见任务是键入一个SQL文件,并在运行bake生成一些脚手架之前将其写入数据库。这是我对CakePHP的少数抱怨之一——这样做将我与MySQL联系在一起,我想知道是否有更好的方法通过代码来实现这一点。例如,在某些框架中,我可以定义模型与数据类型一起使用的列,然后通过管理界面运行命令,根据代码中显示的内容“构建”数据库。它将在框架后面的任何数据库上执行此操作

有没有办法让CakePHP2.x做这样的事情?我想在模型代码中写出数据库模式,并运行bake之类的命令来自动生成所需的表和列。在深入阅读食谱文档之后,他们似乎做了我想做的事情:

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

但是没有任何例子可以解释我将从那里做什么。_schema属性是否有不同的用途?任何帮助都将不胜感激

不是来自$\u架构数组本身。但是在/APP/Config/schema中创建和使用模式文件
schema.php

然后可以运行bake命令“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...
}

从控制台目录的何处运行。不,永远不要这样做。总是从你的应用程序目录,相对而言:控制台/蛋糕在2.x。3.x中的料仓/蛋糕(如文件所述)。