数据库操作
终于写到数据库操作。xts框架只支持MySQL一种关系型数据库,对PostgreSQL和sqlite等常用库没有提供支持。我会分三个部分来介绍数据库的相关内容,包括基本的SQL查询,ORM功能以及ORM的Relation-Load功能。
配置MySQL数据库
MySQL基本配置如下
'db' => array(
'class' => '\\xts\\Query',
'singleton' => true,
'conf' => array(
'host' => 'localhost',
'port' => 3306,
'schema' => 'xts',
'charset' => 'utf8',
'user' => 'xts',
'password' => 'xtstest',
'persistent' => false,
),
),
这个配置应该放在component配置中,db是作为组件ID。xts\Query
类提供基本的数据库操作功能。可以在conf中指定数据库的主机名、端口号、数据库名、连接字符集、用户名、密码还有是否启用长连接。
执行SQL语句
可以使用xts\Query
类的query方法可以运行一条SQL语句并返回执行结果。
X::db()->query(
"Select * From `user` Where `id`=:id",
array(':id' => 1)
);
query方法会返回整个结果集,相当于PDO的fetchAll方法。如果SQL运行时发生错误,会抛出xts\OrangeException
异常。
xts\Query
类另有一个execute方法来运行一条SQL语句。此方法不支持变量绑定,只能书写完整的SQL语句字串。这个方法会返回操作影响的行数,比较适合用来执行Insert等无需返回结果集的函数。
取得上次Insert语句的自增长ID
xts\Query
类的getLastInsertId方法可以取得上次插入语句的生成的自增ID。这个方法符合属性getter的格式,也可以以属性的方式访问它。
X::db()->execute(
"Insert Into `user` (`id`, `name`, `email`) Values ( NULL, 'foobar', 'foobar@example.com'"
);
$id = X::db()->lastInsertId;
SQL Builder
xts提供SQL Builder来帮助书写SQL语句,它会自动做一些检查,不过功能比较弱,没有支持Join语句,所以无法取代Query。
在select的时候,SqlBuilder支持自动生成Select字段表
$sb = new \xts\SqlBuilder(X::db());
$sb->select('id', 'name', 'email')
->from('user')
->where('name like :n', array(':n'=>'Smit%');
$result = $sb->query();