模型属性

    欲知完整的模型属性列表及描述请,请访问CakePHP API

    属性为指定数据库连接的名称的字符串,用来绑定模型类和关联的数据库表。可以设置为任意在数据库配置文件中定义的数据库连接。数据库配置文件位于/app/Config/database.php。

    useDbConfig 属性的默认值是 'default'。

    用法示例:

    useTable

    useTable 属性指定数据库表的名称。默认情况下,模型会使用模型类名的小写复数形式。可以设定为其他表,如果希望模型不使用数据库表,也可以设置为false

    用法示例:

    1. class Example extends AppModel {
    2. public $useTable = false; // 此模型不使用数据库表
    3. }

    或者:

    1. class Example extends AppModel {
    2. public $useTable = 'exmp'; // 此模型使用数据库表 'exmp'
    3. }

    tablePrefix

    模型使用的表的前缀。表的前缀最初设置在数据库连接文件 /app/Config/database.php 中。默认不使用前缀。可以在模型中设置 tablePrefix 属性覆盖默认值。

    用法示例:

    primaryKey

    每个表通常会有一个主键,id。可以改变模型用作主键的字段名称。当设置 CakePHP来使用在一个已经存在的数据库表时,这很常见。

    用法示例:

    1. class Example extends AppModel {
    2. // example_id是数据库中的字段名
    3. public $primaryKey = 'example_id';
    4. }

    例如,要使用 username 字段:

    1. class User extends AppModel {
    2. public $displayField = 'username';
    3. }

    多个字段名不能结合成一个显示字段(display field)。比如,你不能指定array('first_name', 'last_name') 作为显示字段。但是,可以利用模型的virtualField 属性生成一个虚拟字段。

    recursive

    recursive 属性决定 CakePHP 用 和 read() 方法读取关联数据时的深度。

    设想应用程序中有组,组属于域(domain),组中有很多用户,每个用户又有很多文章。可以根据调用 $this->Group->find() 要返回的数据量来设置 $recursive 为不同的值:

    • -1 CakePHP 只读取 Group 数据,没有 join。
    • 1 CakePHP 读取 Group 数据,它的域(domain),及其关联的用户(User)
    • 2 CakePHP 读取 Group 数据,它的域(domain),关联的用户(User),以及用户关联的文章
      不要设置比所需要的更大的值。让 CakePHP 读取不会使用的数据会不必要地减慢应用程序。也要注意默认的 recursive 默认级别是 1。

    注解

    如果想把 $recursive 与 fields 功能结合,必须手动把包含必要外键字段的列加入到 fields 数组中。在上面的例子中,这意味着需要加入 domain_id

    小技巧

    建议的 recursive 级别应当为 -1。这可以防止读取不必要的、甚至不需要的关联数据。这最有可能发生在大部分 find() 方法调用中。只在需要时候提高该级别,要么使用Containable 行为 。

    可以把它添加到 AppModel 中来实现:

    order

    任何 find 操作的数据的默认排序。可能的值包括:

    1. $order = "field"
    2. $order = "Model.field";
    3. $order = "Model.field asc";
    4. $order = "Model.field ASC";
    5. $order = "Model.field DESC";
    6. $order = array("Model.field" => "asc", "Model.field2" => "DESC");

    data

    模型读取数据的容器。尽管模型类返回的数据通常作为调用 find() 方法的返回值,你也可以在模型的回调(callback)中访问保存在 $data 中的信息。

    • name
    • type
      CakePHP 支持的类型如下:

    • string

    • 通常对应 CHAR 或 VARCHAR 列。对于 SQL Server,使用 NCHAR 和 NVARCHAR。
    • text
    • 对应 TEXT,MONEY 类型。
    • uuid
    • 对应 UUID 类型,如果数据库支持的话,否则就会生成 CHAR(36) 字段。
    • integer
    • 对应数据库提供的 INTEGER,SMALLINT 类型。
    • biginteger
    • 对应数据库提供的 BIGINT 类型。
    • decimal
    • 对应 DECIMAL,NUMERIC 类型。
    • float
    • 对应 REAL,DOUBLE PRECISION 类型。
    • boolean
    • 对应 BOOLEAN 类型,但在 MySQL 中,用 TINYINT(1) 代表布尔值。
    • binary
    • date
    • 对应支持时区的 DATE 列类型。
    • datetime
    • 对应支持时区的 DATETIME 列类型。在 PostgreSQL 和 SQL Server 中,这会变成TIMESTAMP 或 TIMESTAMPTZ 类型。
    • timestamp
    • 对应 TIMESTAMP 类型。
    • time
    • 在所有的数据库中,对应 TIME 类型。
    • null
    • default value
    • length
      用法示例:
    1. protected $_schema = array(
    2. 'first_name' => array(
    3. 'type' => 'string',
    4. 'length' => 30
    5. ),
    6. 'last_name' => array(
    7. 'type' => 'string',
    8. 'length' => 30
    9. ),
    10. 'email' => array(
    11. 'type' => 'string',
    12. 'length' => 30
    13. ),
    14. 'message' => array('type' => 'text')
    15. );

    validate

    该属性保存的规则,让模型可以在保存数据前验证数据。以字段名为键保存的正则表达式让模型可以尝试去匹配。

    注解

    没必要在调用 save() 前调用 validate(),因为 save() 会在真的保存数据前自动验证数据。

    欲知验证的更多信息,请参见本手册后面的 数据验证

    virtualFields

    这个模型的虚字段数组。虚字段是具有别名的 SQL 表达式。加入该属性的虚字段会和模型的其它字段一样读取,但不能保存。

    MySQL 的用法示例:

    在之后的 find 操作,User 结果会包含一个 name 键,对应为拼接的结果。创建一个与数据库中已经存在的字段同名的虚字段是不明智的,这会导致 SQL 错误。

    欲知有关 属性、它的正确用法、以及限制,请参见虚字段

    name

    模型的名称。如果不在模型文件中指定,这会被构造函数设为类名。

    1. class Example extends AppModel {
    2. }

    若设为 true,单个请求中模型读取的数据会被缓存。该缓存仅保存在内存中,且仅保持(当前)请求所持续的时间段。任何对相同数据的重复请求会由该缓存处理。