📅  最后修改于: 2020-10-16 07:24:36             🧑  作者: Mango
查询构建器允许您以编程方式创建SQL查询。查询构建器可帮助您编写更具可读性的SQL相关代码。
要使用查询生成器,您应该按照以下步骤操作:
要构建yii \ db \ Query对象,您应该调用不同的查询构建器函数来定义SQL查询的不同部分。
步骤1-要显示查询生成器的典型用法,请以这种方式修改actionTestDb方法。
public function actionTestDb() {
//generates "SELECT id, name, email FROM user WHERE name = 'User10';"
$user = (new \yii\db\Query())
->select(['id', 'name', 'email'])
->from('user')
->where(['name' => 'User10'])
->one();
var_dump($user);
}
步骤2-转到http:// localhost:8080 / index.php?r = site / test-db ,您将看到以下输出。
where()函数定义查询的WHERE片段。要指定WHERE条件,可以使用三种格式。
字符串格式-‘名称= User10’
哈希格式-[‘名称’=>’User10’,’电子邮件=> user10@gmail.com’]
运算符格式-[‘like’,’name’,’User’]
public function actionTestDb() {
$user = (new \yii\db\Query())
->select(['id', 'name', 'email'])
->from('user')
->where('name = :name', [':name' => 'User11'])
->one();
var_dump($user);
}
以下将是输出。
public function actionTestDb() {
$user = (new \yii\db\Query())
->select(['id', 'name', 'email'])
->from('user')
->where([
'name' => 'User5',
'email' => 'user5@gmail.com'
])
->one();
var_dump($user);
}
以下将是输出。
运算符格式允许您以以下格式定义任意条件-
[operator, operand1, operand2]
运算符可以是-
和− [‘and’,’id = 1’,’id = 2’]将生成id = 1 AND id = 2或:类似于and运算符
之间[[‘between’,’id’,1,15]之间将在1和15之间生成id
not between –与between运算符类似,但是BETWEEN被NOT NOTTWEEN取代
in − [‘in’,’id’,[5,10,15]]中将生成ID IN(5,10,15)
not in-类似于in运算符,但是IN被NOT IN代替
like -[[‘like’,’name’,’user’]将生成名称,例如’%user%’
或like-与like运算符相似,但OR用于拆分LIKE谓词
不喜欢-类似于like运算符,但是LIKE被NOT LIKE代替
或不喜欢-类似于不喜欢运算符,但是OR用于连接NOT LIKE谓词
存在-需要一个操作数,该操作数必须是yii \ db \ Query类的实例
不存在-类似于exist运算符,但构建一个NOT EXISTS(子查询)表达式
<,<=,>,> =或任何其他数据库运算符:[‘<‘,’id’,10]将生成id <10
public function actionTestDb() {
$users = (new \yii\db\Query())
->select(['id', 'name', 'email'])
->from('user')
->where(['between', 'id', 5, 7])
->all();
var_dump($users);
}
以下将是输出。
orderBy()函数定义ORDER BY片段。
示例–
public function actionTestDb() {
$users = (new \yii\db\Query())
->select(['id', 'name', 'email'])
->from('user')
->orderBy('name DESC')
->all();
var_dump($users);
}
以下将是输出。
所述GROUPBY()函数定义的GROUP BY片段,而具有()方法指定HAVING片段。
示例–
public function actionTestDb() {
$users = (new \yii\db\Query())
->select(['id', 'name', 'email'])
->from('user')
->groupBy('name')
->having('id < 5')
->all();
var_dump($users);
}
以下将是输出。
limit()和offset()方法定义LIMIT和OFFSET片段。
示例–
public function actionTestDb() {
$users = (new \yii\db\Query())
->select(['id', 'name', 'email'])
->from('user')
->limit(5)
->offset(5)
->all();
var_dump($users);
}
您可以看到以下输出-
yii \ db \ Query类提供了一组用于不同目的的方法-
all() -返回名称-值对的行数组。
one() -返回第一行。
column() -返回第一列。
scalar() -从结果的第一行和第一列返回标量值。
exist() -返回一个值,该值指示查询是否包含任何结果
count()返回COUNT查询的结果
其他聚合查询方法-包括sum($ q),average($ q),max($ q),min($ q)。 $ q参数可以是列名或数据库表达式。