模型的唯一用途就是封装业务逻辑,因此对于模型,QeePHP 竭尽所能提供了各种支持。虽然自动生成的模型类已经包括了大部分设置,但我们还需要在这个基础上根据业务需求进行定制。
一个模型由几个方面组成:
打开模型的定义文件,在 __define() 方法中可以找到模型的详细定义。这些定义分为几个部分:
模型的基本定制都在 __define() 方法中完成。
__define() 方法应该返回一个数组。这个数组描述了模型的方方面面:
指示使用什么数据表来存放这个模型的属性值。
指示使用哪一个表数据入口对象来负责对象属性值的存取工作,table_class 的值应该是一个类名称,例如 Table_Posts。如果指定了这个设置,则自动忽略 table_name 设置。
指示连接数据表时的设置,通常用于进行跨数据库访问或指定不同的数据表前缀。table_config 的值应该是一个数组,详细设置请参考表数据入口的相关文档。
指示模型中各个属性、关联的设置。没有在这里指定设置的数据表字段自动成为模型的普通属性。例如数据表中有 id、title 两个字段,而 props 中没有指定 title 属性的设置,则 title 字段成为该模型的 title 属性,并且可以读写。关于属性的设置,参考本章节后续的内容。
指示该模型要使用的行为插件。behaviors 的值可以是一个包含多个插件名的数组或字符串,例如“fast_uuid, serializefiled”表示使用 serializefiled和 fast_uuid两个行为插件。
指定每个行为插件的设置。behaviors_settings 的键名是插件名,键值则是一个包含该插件设置的数组。
设置模型的自动验证规则,当模型保存时,这些自动验证规则将被用于检查模型的有效性。
在数据库中新建对象时,要忽略掉的属性。有些时候,我们的数据库结构要求在创建新记录时不能指定某些字段的值,这时就可以通过 create_reject 设置来指定要排除的属性(属性名会自动对应到字段名)。
效果与 create_reject 类似,但仅仅作用在更新数据库中的已有对象时。
指示在数据库中新建对象前,哪些属性的值会被自动替换为指定值。假设有一个业务逻辑“新订单的状态为待审核”,那么我们就可以在 create_autofill 中指定状态属性的值为特定值,从而保证不管从何种途径创建新的订单对象,其状态都是“待审核”。
效果与 create_autofill 类似,但仅仅作用在更新数据库中的已有对象时。
指示在通过 new 方法构造对象时能够指定的属性值。这个设置是一个安全性设置,具体说明请参考本章节的后续内容。
指示在通过 new 方法构造对象时不允许指定的属性值。如果指定了 attr_accessible 设置,则忽略 attr_protected 设置。具体说明请参考本章节的后续内容。