YII2学习笔记查询类分析.docx
- 文档编号:11046514
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:11
- 大小:250.79KB
YII2学习笔记查询类分析.docx
《YII2学习笔记查询类分析.docx》由会员分享,可在线阅读,更多相关《YII2学习笔记查询类分析.docx(11页珍藏版)》请在冰豆网上搜索。
YII2学习笔记查询类分析
QueryInterFace
All()
One()
Count($q=‘*’,$db)
Exists()
indexBy($cloumn)//索引值或者使用回调函数
where($condition)
`['type'=>1,'status'=>2]`
generates`(type=1)AND(status=2)`.
`['id'=>[1,2,3],'status'=>2]`
generates`(idIN(1,2,3))AND(status=2)`.
`['status'=>null]
generates`statusISNULL`.
`['and','id=1','id=2']`
generate`id=1ANDid=2`.
`['and','type=1',['or','id=1','id=2']]`
generate`type=1AND(id=1ORid=2)`.
Themethodwill*not*doanyquotingorescaping.
`['between','id',1,10]`
generate`idBETWEEN1AND10`.
`['in','id',[1,2,3]]`
generate`idIN(1,2,3)`.
Tocreateacomposite`IN`conditionyoucanuseandarrayforthecolumnnameandvalue,wherethevaluesareindexedbythecolumnname:
`['in',['id','name'],[['id'=>1,'name'=>'foo'],['id'=>2,'name'=>'bar']]]`
嵌套条件
`['in','user_id',(newQuery())->select('id')
->from('users')->where(['active'=>1])]`
`['like','name','tester']`
generate`nameLIKE'%tester%'`.
`['like','name',['test','sample']]`
Generate`nameLIKE'%test%'ANDnameLIKE'%sample%'`
Themethodwillproperlyquotethecolumnnameandescapespecialcharactersinthevalues.
LIKE查询使用了过虑
`['exists',(newQuery())->select('id')->from('users')->where(['active'=>1])]`
`EXISTS(SELECT"id"FROM"users"WHERE"active"=1)`
`['>=','id',10]`
`id>=10`.
addWhere()
orWhere()
filterWhere(array$condtion)
忽略空值的查询
andFilterWhere(array$condtion)
orFilterWhere(array$condtion)
orderBy($cloumns)
e.g."idASC,nameDESC")oranarray
e.g.`['id'=>SORT_ASC,'name'=>SORT_DESC]`
addOrderBy($cloumns)
limit($limit)
offset($offset)
yii\db\Command
YII的SQL命令创建类继承:
Component
执行INSERTUPDATEDELETE语句
使用execute()
执行SEELCT使用
queryAll()
queryOne()
queryColumn
queryScalar()
query()
exp:
$users=$connection->createCommand(‘SELECT*FROMuser’)->queryAll()
在Command模式下,只要绑定了parameterSQL自动实现prepared预处理
=====================================================
属性:
$db
$pdoStatement
$fetchMode=\PDO:
:
FETCH_ASSOC
$params=[]绑定的参数(name=>value)会产生原生SQL
$queryCacheDuration//缓存时间
$queryCacheDependency//缓存地点
$_pendingParams=[]//等待绑定到PDOStatement上的参数
$_sql
方法:
Cache($duration=null,$dependency=null)//不指定会使用connection中的该属性
noCache(){$this->queryCacheDuration=-1;}
getSql()return$this->_sql;
setSql($sql)
//在第一个设置SQL的时候会清空SQL上的绑定参数,以及预处理的参数
//将参数插入到占位符中
getRawSql()获取原生SQL
name=?
anda=?
[name=asage=a]
name=,anda=
测试语句:
解析:
name占位符
Prepare($forRead=null)//参数是指定只读的预编译还是可写的
//这个参数主要是为了实现读写分离
ProtectedfunctionbindPendingParams(){}//为PDOStatement绑定值
Cancel(){$this->pdoStatement=null}清除PDOStatement
使用命名占位符
使用问号占位符将使用1的索引值
$dateType如果为空则使用这个值的PHP的类型
这个地方的绑定是pdoStatement的bindParam,绑定后即可以执行
bindParam($name,&$value,$dataType=null,$length=null,$driverOptions=null)
这个并不是pdoStatement的bindValue,只是YII预处理的bindValue
主要是设置$_pendingParams和$params的属性
bindValue($name,$value,$dataType=null)
bindValues($values)
//返回一个DataReader对象
Query(){return$this->queryInternal(‘’);}
//返回一个结果数组
queryAll($fetchMode=null)
{return$this->queryInternal(‘fetchAll’,$fetchMode’);}
//返回一个数组或者是FLASE
queryOne()
//返回一个字符串或者NULL或boolean第一行第一列没有值就返回false
queryScalar()
//返回一个数组或空数组
queryColumn()
insert($table,$columns)//待分析研究关联QueryBuilder.php
后续的
batchInsert()update(…)delete(…)
createTable(…)
renameTable(…)
dropTable(….)
truncateTable(…)
addColumn(…)
dropColumn(…)
renameColumn(..)
alterColumn(….)
alertColumn(…)
addPrimaryKey(…)
dropPrimaryKey(…)
addForeignKey(….)
dropForeignKey(…)
createIndex(….)
dropIndex(…)
resetSequence(…)
checkIntegrity(….)
execute()
以上都只是返回了一个新的SQL语句
使用了预处理$this->params的参数并没有真的绑到SQL,只是为了获取追踪SQL语句
绑定更新例子
$data=[];
$cmd=\Yii:
:
$app->db->createCommand();
Yii\db\QueryBuilder
ConstPARAM_PREFIX=‘:
qp’//定义绑定参数的前缀
$db
$separator=““
$typeMap=[]
$conditionBuilders=[‘NOT’=>’buildNotCondition’,’AND’,’OR’,’BETWEEN’,
NOTINLIKENOTLIKEORLIKEORNOTLIKEEXISTS,NOTEXISTS]
//$query对象生成SELECT查询语句
Build($query,$params=[])
//生成INSERT查询语句因此Command的insert语句是预处理插入并自动加入字段标识``
$sql=$queryBuilder->insert('user',[
'name'=>'Sam',
'age'=>30,
],$params);
Insert($tale,$columns,&$params){
使用:
qp01…来生成_pendingParams将空的$params填充
}
$sql=$queryBuilder->batchInsert('user',['name','age'],[
['Tom',30],
['Jane',20],
['Linda',25],
]);
//生成插入多条记录的SQL不支持预处理插入
batchInsert($table,$columns,$rows)
//更新语句支持预处理插入
$params=[];
$sql=$queryBuilder->update('user',['status'=>1],'age>30',$params);
Update($table,$columns,$condition,&$params)
$sql=$queryBuilder->delete('user','status=0');
支持预处理
Delete($table,$condition,&$params)
createTable($table,$columns,$options=null)
renameTable(….)
//$columns需要查询的列数组
buildSelect($columns,&$params,$distinct=false,$selectOption=null)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- YII2 学习 笔记 查询 分析