/** * 架构函数 * 取得DB类的实例对象 字段检查 * @access public * @param string $name 模型名称 * @param string $tablePrefix 表前缀 * @param mixed $connection 数据库连接信息 */ public function __construct($name = '', $tablePrefix = '', $connection = '') { parent::__construct($name, $tablePrefix, $connection); // 聚合模型的字段信息 if (empty($this->fields) && !empty($this->modelList)) { $fields = array(); foreach ($this->modelList as $model) { // 获取模型的字段信息 $result = $this->db->getFields(M($model)->getTableName()); $_fields = array_keys($result); // $this->mapFields = array_intersect($fields,$_fields); $fields = array_merge($fields, $_fields); } $this->fields = $fields; } // 设置第一个模型为主表模型 if (empty($this->masterModel) && !empty($this->modelList)) { $this->masterModel = $this->modelList[0]; } // 主表的主键名 $this->pk = M($this->masterModel)->getPk(); // 设置默认外键名 仅支持单一外键 if (empty($this->fk)) { $this->fk = strtolower($this->masterModel) . '_id'; } }
/** * 动态方法实现 * @access public * @param string $method 方法名称 * @param array $args 调用参数 * @return mixed */ public function __call($method, $args) { if (strtolower(substr($method, 0, 8)) == 'relation') { $type = strtoupper(substr($method, 8)); if (in_array($type, array('ADD', 'SAVE', 'DEL'), true)) { array_unshift($args, $type); return call_user_func_array(array(&$this, 'opRelation'), $args); } } else { return parent::__call($method, $args); } }
/** * 对保存到数据库的数据进行处理 * @access protected * @param mixed $data 要操作的数据 * @return boolean */ protected function _facade($data) { // 检查序列化字段 $data = $this->serializeField($data); return parent::_facade($data); }