NetworkOptimizationExpertTeam内容摘要① 关联模型(14讲)模型操作-关联模型(14讲)模型操作-关联模型1.1 关联模型形式通常我们所说的关联关系包括下面三种:一对一关联:ONE_TO_ONE,包括HAS_ONE和BELONGS_TO HAS_ONE关联表示当前模型拥有一个子对象,例如,每个员工都有一个人事档案。我们可以建立一个用户模型UserModel Belongs_to关联表示当前模型从属于另外一个父对象,例如每个用户都属于一个部门多对多关联一对多关联:ONE_TO_MANY,包括HAS_MANY和BELONGS_TO MANY_TO_MANY MANY_TO_MANY关联表示当前模型可以属于多个对象,而父对象则可能包含有多个子对象,通常两者之间需要一个中间表类约束和关联。例如每个用户可以属于多个组,每个组可以有多个用户(14讲)模型操作-关联模型1.2 关联模型继承classUserModelextendsRelationModel{protected$_link=array(Profile=array(mapping_type=HAS_ONE,class_name=Profile,//定义更多的关联属性……),);}(14讲)模型操作-关联模型1.3 关联模型 HAS_ONEmapping_type关联类型,这个在HAS_ONE关联里面必须使用HAS_ONE常量定义。class_name要关联的模型类名例如,class_name定义为Profile的话则表示和另外的Profile模型类关联,这个Profile模型类是无需定义的,系统会自动定位到相关的数据表进行关联。mapping_name关联的映射名称,用于获取数据用该名称不要和当前模型的字段有重复,否则会导致关联数据获取的冲突。如果mapping_name没有定义的话,会取class_name的定义作为mapping_name。如果class_name也没有定义,则以数组的索引作为mapping_name。foreign_key关联的外键名称外键的默认规则是当前数据对象名称_id,例如:UserModel对应的可能是表think_user(注意:think只是一个表前缀,可以随意配置)那么think_user表的外键默认为user_id,如果不是,就必须在定义关联的时候显式定义foreign_key。mapping_fields关联要查询的字段默认情况下,关联查询的关联数据是关联表的全部字段,如果只是需要查询个别字段,可以定义关联的mapping_fields属性。as_fields直接把关联的字段值映射成数据对象中的某个字段这个特性是ONE_TO_ONE关联特有的,可以直接把关联数据映射到数据对象中,而不是作为一个关联数据。当关联数据的字段名和当前数据对象的字段名称有冲突时,还可以使用映射定义。(14讲)模型操作-关联模型1.4 关联模型 BELONGS_TOclass_name要关联的模型类名mapping_name关联的映射名称,用于获取数据用该名称不要和当前模型的字段有重复,否则会导致关联数据获取的冲突。foreign_key关联的外键名称mapping_fields关联要查询的字段condition关联条件parent_key自引用关联的关联字段默认为parent_id自引用关联是一种比较特殊的关联,也就是关联表就是当前表。as_fields直接把关联的字段值映射成数据对象中的某个字段(14讲)模型操作-关联模型1.5 关联模型 HAS_MANYclass_name要关联的模型类名mapping_name关联的映射名称,用于获取数据用该名称不要和当前模型的字段有重复,否则会导致关联数据获取的冲突。foreign_key关联的外键名称外键的默认规则是当前数据对象名称_id,例如:UserModel对应的可能是表think_user(注意:think只是一个表前缀,可以随意配置)那么think_user表的外键默认为user_id,如果不是,就必须在定义关联的时候定义mappin