|
$belongsTo 定义从属关联 1、外键放置在主表中; 2、保存时不会自动更新关联表的记录; 3、删除时也不会更新关联表的记录。 示例:
多个文章都属于某一个栏目。 格式一: class Articles
{ var $belongsTo = array( array( 'tableClass' => 'Columns', 'foreignKey' => 'column_id', 'mappingName' => 'column' ), ); } 在上面的格式中,foreignKey 表示在当前表中用什么字段存储对关联表的主键引用。 mappingName 表示在主表的返回结果中,以什么名字保存关联表的数据。 如果不提供 mappingName 参数,则假定使用 tableClass。 格式二: class Articles { var $belongsTo = 'Columns'; } 格式二是一种简化写法。foreignKey 字段名将和关联表的主键字段名相同。 ============================ $hasMany 定义一对多关联 1、外键保存在关联表中; 2、保存时自动更新关联表的记录; 3、删除主表记录时自动删除关联记录。 示例: 每个用户(user)有多张订单 order。 格式一: class Users { var $hasMany = array( array( 'tableClass' => 'Orders', 'foreignKey' => 'user_id', 'mappingName' => 'orders', ), ); } 在一对多关系中,当前表并不包含对关联表的主键引用。 而是在关联表中保存对当前表的主键引用。 在上面的格式中,foreignKey 指示在关联表中用什么字段存储对当前表的主键引用。 mappingName 表示在主表的返回结果中,以什么名字保存关联表的数据。 如果不提供 mappingName 参数,则假定使用 tableClass。 格式二: class Users { var $hasMany = 'Orders'; } 简化写法中,foreignKey 字段名将和当前表的主键字段名相同。 ============================ $hasOne 定义一对一关联 1、外键放置在关联表中; 2、保存时如果有关联对象,则自动创建或更新关联表的记录; 3、删除主表记录时自动删除关联记录。 示例: 当前表为 users,用于存储用户账户。而每个用户账户有且只有一个对应的个人信息(profile)记录。 格式一: class Users { var $hasOne = array( array( 'tableClass' => 'Profiles', 'foreignKey' => 'profile_id', 我觉得应该是user_id 'mappingName' => 'profile', ), ); } 在上面的格式中,foreignKey 表示在关联表中用什么字段存储对主表的主键引用。 mappingName 表示在主表的返回结果中,以什么名字保存关联表的数据。 如果不提供 mappingName 参数,则假定使用 tableClass。 格式二: class Users { var $hasOne = 'Profiles'; } 格式二是一种简化写法。foreignKey 字段名将和主表的主键字段名名相同。 ============================ $manyToMany 定义多对多关联
1、外键保存在中间表里面; 2、保存时自动更新中间表; 3、删除主表记录时自动删除中间表的相关记录。 示例: 每个成员(member)可以拥有多个角色(role),而每个角色也可以指定给多个成员。 格式一: class Members { var $manyToMany = array( array( 'tableClass' => 'Roles', 'joinTable' => 'member_roles', 'foreignKey' => 'member_id', 'assocforeignKey' => 'role_id', 'mappingName' => 'roles', ), ); } 在多对多关系中,当前表并不包含对关联表的主键引用。 而是在一个中间表里面保存对当前表和关联表的主键引用。 在上面的格式中,joinTable 表示中间表的名字。foreignKey 和 assocforeignKey 分别表示在中间表里面用什么字段存储对主表和 关联表主键字段的引用。 mappingName 表示在主表的返回结果中,以什么名字保存关联表的数据。 如果不提供 mappingName 参数,则假定使用 tableClass。 格式二: class Members { var $manyToMany = 'Roles'; } 简化写法中,foreignKey 字段名将和当前表的主键字段名相同。 assocforeignKey字段名称则和关联数据表的主键字段名相同。 而中间表名称将用FLEA_Db_TableDataGateway::getMidtableName() 方法计算。 关联中必须设置的属性为: 'name', // 该连接的名字,用于检索指定的连接,同一个数据表的多个关联不能使用相同的名字。如果定义关联时没有指定名字,则以关联对象的 $mappingName 属性作为这个关联的名字。 'tableClass', // 关联的表数据入口对象名 'mappingName', // 字段映射名 可选属性: 'foreignKey', //外键字段名 'sort', //对关联表进行查询时使用的排序参数 'conditions', //对关联表进行查询时使用的条件参数 'fields', //对关联表进行查询时要获取的关联表字段 'limit', //对关联表进行查询时限制查出的记录数 'enabled', //是否处理关联,设置为falses时,不处理该表入口的任何关联。enabled 的优先级高于 linkRead、linkCreate、linkUpdate 和 linkRemove。 'countOnly', //指示在查询关联表时是否仅仅统计记录数,而不实际查询数据 'counterCache', //将关联记录总数缓存到指定的字段,数据表中要建立相应的字段 'linkRead', //指示是否在主表读取记录时也读取该关联对应的关联表的记录,默认ture 'linkCreate', //指示是否在主表创建记录时也创建该关联对应的关联表的记录,默认ture 'linkUpdate', //指示是否在主表更新记录时也更新该关联对应的关联表的记录,默认ture 'linkRemove', //指示是否在主表删除记录时也删除该关联对应的关联表的记录,默认ture 'linkRemoveFillValue', //当删除主表记录而不删除关联表记录时,用什么值填充关联表记录的外键字段,默认0 'saveAssocMethod', //指示当保存关联数据时,采用何种方法,默认为 save,可以设置为 create、update 或 replace FLEAPHP的关联可以使操作主表的时候方便地操作关联表,合理的使用会提高效率。
|