-
Notifications
You must be signed in to change notification settings - Fork 18
FAQ sqlBuilder
- 实例化一个对象, 然后按照SQL的结构调用对应方法, 要求调用时要知道如何写SQL
- 不断连贯操作的方法调用, 不仅要学习一种语法, 而且浪费性能
- 简单的构造调用不如一条SQL语法简洁, 复杂的构造调用不如一条SQL可读性强
- 使用起来, 像是给一个封装好的方法传递参数
- 一个真正的, 不需要知道SQL结构, 只需照顾业务需求的
- 对应ORM 或许应该叫它 DRM(Data Relational Mapping)
<?php
/**
* 描述 : sql请求构造器演示类
*/
class of_base_sqlQuery_builder {
private $params = array();
/**
描述 : 构造函数
参数 :
&data : 构造数据
&pool : 连接池
*/
public function __construct(&$data, &$pool) {
$this->params['data'] = &$data;
$this->params['pool'] = &$pool;
}
/**
描述 : 指定操作表名
参数 :
table
返回 :
当前对象
/
public function &from($table) {
$this->params['table'] = &$table;
return $this;
}
/**
描述 : 指定操作条件
参数 :
where
返回 :
当前对象
/
public function &where($where) {
$this->params['where'] = &$where;
return $this;
}
/**
描述 : 执行查询操作
参数 :
limit
返回 :
当前对象
/
public function &select($limit = null) {
$index = &$this->params;
$sql = 'SELECT `' . join('`, `', $index['data']) . '`';
$sql .= ' FROM ' . $index['table'];
empty($index['where']) || $sql .= ' WHERE ' . $index['where'];
$limit === null || $sql .= ' LIMIT ' . $limit;
return of_db::sql($sql, $index['pool']);
}
/**
描述 : 消息初始化
返回 :
参数为数组时返回构造对象, 其它返回执行结果
/
public static function &init(&$sql, &$key) {
//实例化构造对象
if (is_array($sql)) {
$result = new self($sql, $key);
//bool, null, string 直接查询
} else {
$result = &of_db::sql($sql, $key);
}
return $result;
}
}
//注册快捷方法, 重写SQL执行方式
of::link('&sql', '$sql, $key = 'default'', 'return of_base_sqlQuery_builder::init($sql, $key);');
<?php //修改框架配置文件中的 preloaded 项 return array( //预先装载类 'preloaded' => array( //加载SQL构造器 'of_base_sqlQuery_builder ' ) );
<?php
$data = L::sql(array('id', 'name'))
->from('_of_sso_func')
->where('id > 1')
->select('2, 3');
print_r($data);
手册地址 http://phpof.net/
- 入门指引
-
疑难解答
- 部署时会遇到的那些常见问题
简单却容易忽视 - 框架内置有哪些管理界面
生产模式进入界面需用 __OF_DEBUG__ - 如何定制不同的架构模式
通过配置入口文件中调度方法的参数即可 - 如何面向命名空间开发
of_xx 类可以按照命名空间方式调用 - 如何设置不同的部署模式
通过_of.debug设置 开发,测试,生产 模式 - 为什么控制层类文件要返回true
这是防止非法访问的方法之一 - 为什么传到视图层的变量会被编码
这是因为 XSS 安全防范的原因 - 为什么框架没有SQL构造器
因常规方案牺牲了性能又未很好解决问题 - 如何快速开发用户及权限管理功能
单点登录(SSO)模块因此而存在 - 怎么在系统的基础上扩展底层功能
三点: 扩展开发, 预先加载, 底层钩子 - 怎么使用 Composer 依赖管理工具
框架已集成, 默认关闭状态
- 部署时会遇到的那些常见问题
- 组件使用
- 集成插件
- 扩展开发
- 开发手册