您的位置:首页 > 编程语言 > PHP开发

YII2.0 常用查询语句

2015-12-19 09:06 645 查看
本文主要说说一些基本的查询语句:

1.首先理解以下三个的返回类型:

find() 返回值是一个ActiveQuery()对象
hasOne() 与 hasMany() 返回值是 yii\db\ActiveQuery instance
ActiveDataProvider 返回的值是 yii\db\ActiveQuery instance


2.下面详细说一些常用的查询:

2.1.查询单条用户记录:

findOne() 与 find()->where()的区别
前者根据条件查询一条记录,后者根据条件查询一条或多条记录
前者的参数可以是主键,或键值对,后者参数必须是键值对。因此:

User::findOne($id);
等价于 User::findOne(['id' => $id]);
等价于 User::find()->where(['id' => $id])->one();
等价于 User::findBySql('SELECT * FROM user')->one(); //这个查询不完全等同于以上三个


2.2. 查询单列数据

#查询一列,返回对象数组
User::find()->select('id')->all();
array(1) {
[0]=>
object(common\models\User)#116 (8) {
["_attributes":"yii\db\BaseActiveRecord":private]=>
array(1) {
["id"]=>
int(1)
}

#查询一列,返回数组
User::find()->select('id')->asArray()->all();
array(1) {
[0]=>
array(1) {
["id"]=>
string(1) "1"
}
}

#查询一列之和
User::find()->select('salary')->sum('salary');


2.3.查询多列
4000
数据

/*query查询*/

$query = (new \yii\db\Query())
->select('id, name')
->from('user')
->limit(10);

/*ActiveRecord查询*/

User::find()->select('username,email')->one();
#返回结果是对象,如下:
object(common\models\User)#116 (8) {
["_attributes":"yii\db\BaseActiveRecord":private]=>
array(2) {
["username"]=>
string(4) "jack"
["email"]=>
string(16) "986994@qq.com"
}
获取数据为,$user->username, $user->email


2.4.查询多条记录:

/*返回所有记录*/
User::find()->all();


/*查询满足条件 [单个条件,多个条件] 的多条记录*/
User::find()->where(['sex' => 'male'])->all();


/*统计查询,在查询后加count方法,统计查询结果中的记录数量*/
User::find()->count();


/*排序查询,根据id查询一条最新注册的用户记录*/
User::find()->orderby(['id' => SORT_DESC, 'created_at' => SORT_DESC]);


2.5.关联查询

/*包含中间表的1:n查询*/
public function getLectures()
{
return $this->hasMany(VLecture::className(), ['section_id' => 'id'])->viaTable('vw_section', ['course_id' => 'id']);
}

/* 1:n 查询*/
public function getTeachs(){
return $this->hasMany(VCourseTeach::className(), ['course_id' => 'id']);
}

/* 1:1 查询*/
public function getCategory()
{
return $this->hasOne(VCategory::className(), ['id' => 'category_id']);
}


2.6.DataProvider查询

这个查询比较重要,即在程序中,使用方式有两种:

其一是实例化一个ActiveDataProvider类;

其二是生成相关模型的search类,将它作为所有查询的入口;

public function getSupporters(){
$dataProvider = new ActiveDataProvider([
'query' =>VCrowdfundSupport::find()->where(['crowdfund_id' => $this->id]),
]);
$dataProvider->sort = ['defaultOrder' => ['created_at' => SORT_DESC]];
$dataProvider->pagination->pageSize = 9;
return $dataProvider;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Yii2-0 search 查询语句