【php开源代码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。网学会员整理了php开源代码-TableDataGateway.php的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
<?php
/////////////////////////////////////////////////////////////////////////////
// 这个文件是 FleaPHP 项目的一部分
//
// Copyright (c) 2005 - 2006 Flea
PHP.org (www.fleaphp.org)
//
// 要查看完整的
版权信息和许可信息,请查看源代码中附带的 COPYRIGHT 文件,
// 或者访问 http://www.fleaphp.org/ 获得详细信息。
/////////////////////////////////////////////////////////////////////////////
/**
* 定义 FLEA_Db_TableDataGateway 类
*
* @copyright Copyright (c) 2005 - 2006 FleaPHP.org (www.fleaphp.org)
* @author 廖宇雷 dualface@gmail.com
* @package DB
* @version $Id: TableDataGateway.php 683 2007-01-05 16:27:22Z dualface $
*/
// {{{ constants
/**
* 虚拟关联字段名
*/
if (!defined('LINK_KEY')) {
define('LINK_KEY', 'ref__row__id');
}
/**
* 四种关联
*/
define('HAS_ONE', 1);
define('BELONGS_TO', 2);
define('HAS_MANY', 3);
define('MANY_TO_MANY', 4);
// }}}
/**
* FLEA_Db_TableDataGateway 类封装了数据表的 CRUD 操作
*
* 针对每个数据表,开发者应该从 FLEA_Db_TableDataGateway 派生自己的类。
* 并通过添加方法来封装针对该数据表的更复杂的数据库操作。
*
* @package DB
* @author 廖宇雷 dualface@gmail.com
* @version 1.1
*/
class FLEA_Db_TableDataGateway
{
/**
* 不包含前缀的数据表名
*
* 如果在派生类中没有覆盖此变量,则以派生类的类名作为数据表名。
*
* @var string
*/
var $tableName = null;
/**
* 进行过标准化以后的数据表名称,包含前缀
*
* @var string
*/
var $fullTableName = null;
/**
* 主键字段名
*
* @var string
*/
var $primaryKey = null;
/**
* 指示在保存数据到数据库(创建记录以及更新记录)时是否自动验证数据
*
* @var boolean
*/
var $autoValidation = true;
/**
* 定义一对一关联
*
* 1、外键放置在关联表中;
* 2、保存时如果有关联对象,则自动创建或更新关联表的记录;
* 3、删除主表记录时自动删除关联记录。
*
* 示例:
* 当前表为 users,用于存储用户账户。而每个用户账户有且只有一个对应的个人信息(profile)记录。
*
* 格式一:
* <code>
* class Users
* {
* var $hasOne = array(
* array(
* 'tableClass' => 'Profiles',
* 'foreignKey' => 'profile_id',
* 'mappingName' => 'profile',
* ),
* );
* }
* </code>
*
* 在上面的格式中,foreignKey 表示在关联表中用什么字段存储对主表的主键引用。
* mappingName 表示在主表的返回结果中,以什么名字保存关联表的数据。
* 如果不提供 mappingName 参数,则假定使用 tableClass。
*
* 格式二:
* <code>
* class Users
* {
* var $hasOne = 'Profiles';
* }
* </code>
*
* 格式二是一种简化写法。foreignKey 字段名将和主表的主键字段名名相同。
*
* @var array
*/
var $hasOne = null;
/**
* 定义从属关联
*
* 1、外键放置在主表中;
* 2、保存时不会自动更新关联表的记录;
* 3、删除时也不会更新关联表的记录。
*
* 示例:
* 多个文章都属于某一个栏目。
*
* 格式一:
* <code>
* class Articles
* {
* var $belongsTo = array(
* array(
* 'tableClass' => 'Columns',
* 'foreignKey' => 'column_id',
* 'mappingName' => 'column'
* ),
* );
* }
* </code>
*
* 在上面的格式中,foreignKey 表示在当前表中用什么字段存储对关联表的主键引用。
* mappingName 表示在主表的返回结果中,以什么名字保存关联表的数据。
* 如果不提供 mappingName 参数,则假定使用 tableClass。
*
* 格式二:
* <code>
* class Articles
* {
* var $belongsTo = 'Columns';
* }
* </code>
*
* 格式二是一种简化写法。foreignKey 字段名将和关联表的主键字段名相同。
*
* @var array
*/
var $belongsTo = null;
/**
* 定义一对多关联
*
* 1、外键保存在关联表中;
* 2、保存时自动更新关联表的记录;
* 3、删除主表记录时自动删除关联记录。
*
* 示例:
* 每个用户(user)有多张订单 order。
*
* 格式一:
* <code>
* class Users
* {
* var $hasMany = array(
* array(
* 'tableClass' => 'Orders',
* 'foreignKey' => 'user_id',
* 'mappingName' => 'orders',
* ),
* );
* }
* </code>
*
* 在一对多关系中,当前表并不包含对关联表的主键引用。
* 而是在关联表中保存对当前表的主键引用。
*
* 在上面的格式中,foreignKey 指示在关联表中用什么字段存储对当前表的主键引用。
* mappingName 表示在主表的返回结果中,以什么名字保存关联表的数据。
* 如果不提供 mappingName 参数,则假定使用 tableClass。
*
* 格式二:
* <code>
* class Users
* {
* var $hasMany = 'Orders';
* }
* </code>
*
* 简化写法中,foreignKey 字段名将和当前表的主键字段名相同。
*
* @var array
*/
var $hasMany = null;
/**
* 定义多对多关联
*
* 1、外键保存在中间表里面;
* 2、保存时自动更新中间表;
* 3、删除主表记录时自动删除中间表的相关记录。
*
* 示例:
* 每个成员(member)可以拥有多个角色(role),而每个角色也可以指定给多个成员。
*
* 格式一:
* <code>
* class Members
* {
* v