/ yii2

yii2-query

这个和 Raw Sql 语句更相似,而且避免了 Yii DAO 原生 sql 关键词格式化的问题,推荐使用。

**只能 SELECT **
**只能 SELECT **
**只能 SELECT **

$query = new Query;
// compose the query
$query->select('id, name')
    ->from('user')
    ->limit(10);
// build and execute the query
$rows = $query->all();
// alternatively, you can create DB command and execute it
$command = $query->createCommand();
// $command->sql returns the actual SQL
$rows = $command->queryAll();

查询生成器(Query Builder)建立在 Yii DAO 基础之上,可让你创建 程序化的、DBMS无关的SQL语句。相比于原生的SQL语句,查询构建器可以帮你 写出可读性更强的SQL相关的代码,并生成安全性更强的SQL语句。

yii\db\Command
- yii\db\Query
- yii\db\ActiveRecord

使用查询构建器通常包含以下两个步骤:

  1. 创建一个 yii\db\Query 对象来代表一条 SELECT SQL 语句的不同子句(例如 SELECT, FROM)。
  2. 执行 yii\db\Query 的一个查询方法,从数据库当中检索数据,例如:all()

如下所示代码是查询构造器的一个典型用法:

$rows = (new \yii\db\Query())
    ->select(['id', 'email'])
    ->from('user')
    ->where(['last_name' => 'Smith'])
    ->limit(10)
    ->all(Yii::$app->db);// 默认为 db ,可以不传此参数。

上面的代码将会生成并执行如下的SQL语句,其中 :last_name 参数绑定了字符串 'Smith'

SELECT `id`, `email` 
FROM `user`
WHERE `last_name` = :last_name
LIMIT 10

例如:

// SELECT * FROM `user` WHERE `username` LIKE `%test%`
$row = (new \yii\db\Query())
    ->from('user')
    ->where(['like', 'username', 'test'])
    ->one(Yii::$app->dbBlog);// 指定 dbBlog

多数据库操作:

return [
'components' => [
    'db' => [
        'class' => 'yii\db\Connection',
        'dsn' => 'mysql:host=localhost;dbname=dbName', //maybe other dbms such as psql,...
        'username' => 'username',
        'password' => 'password',
    ],
    'dbBlog' => [
        'class' => 'yii\db\Connection',
        'dsn' => 'mysql:host=localhost;dbname=dbBlogName', // Maybe other DBMS such as psql (PostgreSQL),...
        'username' => 'username',
        'password' => 'password',
    ],
],
];