最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

yii2怎么查询数据

来源:动视网 责编:小采 时间:2020-11-03 18:23:18
文档

yii2怎么查询数据

yii2怎么查询数据:数据查询User::find()->all(); 此方法返回所有数据; User::findOne($id); 此方法返回 主键 id=1 的一条数据(举个例子); User::find()->where(['name' => '小伙儿'])->one(); 此方法返回
推荐度:
导读yii2怎么查询数据:数据查询User::find()->all(); 此方法返回所有数据; User::findOne($id); 此方法返回 主键 id=1 的一条数据(举个例子); User::find()->where(['name' => '小伙儿'])->one(); 此方法返回


数据查询

User::find()->all(); 此方法返回所有数据;
User::findOne($id); 此方法返回 主键 id=1 的一条数据(举个例子); 
User::find()->where(['name' => '小伙儿'])->one(); 此方法返回 ['name' => '小伙儿'] 的一条数据;
User::find()->where(['name' => '小伙儿'])->all(); 此方法返回 ['name' => '小伙儿'] 的所有数据;
User::find()->orderBy('id DESC')->all(); 此方法是排序查询;
User::findBySql('SELECT * FROM user')->all(); 此方法是用 sql 语句查询 user 表里面的所有数据;
User::findBySql('SELECT * FROM user')->one(); 此方法是用 sql 语句查询 user 表里面的一条数据;
User::find()->andWhere(['sex' => '男', 'age' => '24'])->count('id'); 统计符合条件的总条数;
User::find()->one(); 此方法返回一条数据;
User::find()->all(); 此方法返回所有数据;
User::find()->count(); 此方法返回记录的数量;
User::find()->average(); 此方法返回指定列的平均值;
User::find()->min(); 此方法返回指定列的最小值 ;
User::find()->max(); 此方法返回指定列的最大值 ;
User::find()->scalar(); 此方法返回值的第一行第一列的查询结果;
User::find()->column(); 此方法返回查询结果中的第一列的值;
User::find()->exists(); 此方法返回一个值指示是否包含查询结果的数据行;
User::find()->batch(10); 每次取 10 条数据 
User::find()->each(10); 每次取 10 条数据, 迭代查询

多表查询:

/* 多表联查 */
$model=new Customer();
$model->fiind()->join(‘LEFT JOIN‘,‘student‘,‘student.cid=customer.id‘)
 ->where(‘student.id‘=>Yii::$app->user->id)
 ->andwhere(‘is_ok=1‘)
 ->one()

关联查询

使用 AR 方法也可以查询数据表的关联数据(如,选出表A的数据可以拉出表B的关联数据)。 有了 AR, 返回的关联数据连接就像连接关联主表的 AR 对象的属性一样。

建立关联关系后,通过 $customer->orders 可以获取 一个 Order 对象的数组,该数组代表当前客户对象的订单集。

定义关联关系使用一个可以返回 [[yiidbActiveQuery]] 对象的 getter 方法, [[yiidbActiveQuery]]对象有关联上下文的相关信息,因此可以只查询关联数据。

class Customer extends yiidbActiveRecord
{
 public function getOrders()
 {
 // 客户和订单通过 Order.customer_id -> id 关联建立一对多关系
 return $this->hasMany(Order::className(), ['customer_id' => 'id']);
 }
}
 
class Order extends yiidbActiveRecord
{
 // 订单和客户通过 Customer.id -> customer_id 关联建立一对一关系
 public function getCustomer()
 {
 return $this->hasOne(Customer::className(), ['id' => 'customer_id']);
 }
}

以上使用了[[yiidbActiveRecord::hasMany()]] 和 [[yiidbActiveRecord::hasOne()]]方法。以上两例分别是关联数据多对一关系和一对一关系的建模范例。如,一个客户有很多订单,一个订单只归属一个客户。两个方法都有两个参数并返回[[yiidbActiveQuery]]对象。

建立关联关系后,获取关联数据和获取组件属性一样简单, 执行以下相应getter方法即可:

// 取得客户的订单
$customer = Customer::findOne(1);
$orders = $customer->orders; // $orders 是 Order 对象数组

以上代码实际执行了以下两条 SQL 语句:

SELECT * FROM customer WHERE id=1;
SELECT * FROM order WHERE customer_id=1;

有时候需要在关联查询中传递参数,如不需要返回客户全部订单, 只需要返回购买金额超过设定值的大订单, 通过以下getter方法声明一个关联数据 bigOrders:

class Customer extends yiidbActiveRecord
{
 public function getBigOrders($threshold = 100)
 {
 return $this->hasMany(Order::className(), ['customer_id' => 'id'])
 ->where('subtotal > :threshold', [':threshold' => $threshold])
 ->orderBy('id');
 }
}

联合查询

使用关系数据库时,普遍要做的是连接多个表并明确地运用各种 JOIN 查询。 JOIN SQL语句的查询条件和参数,使用 [[yiidbActiveQuery::joinWith()]] 可以重用已定义关系并调用 而不是使用 [[yiidbActiveQuery::join()]] 来实现目标。

// 查找所有订单并以客户 ID 和订单 ID 排序,并贪婪加载 "customer" 表
$orders = Order::find()->joinWith('customer')->orderBy('customer.id, order.id')->all();
// 查找包括书籍的所有订单,并以 `INNER JOIN` 的连接方式即时加载 "books" 表
$orders = Order::find()->innerJoinWith('books')->all();

以上方法[[yiidbActiveQuery::innerJoinWith()|innerJoinWith()]]是访问INNER JOIN类型的[[yiidbActiveQuery::joinWith()

|joinWith()]]的快捷方式。

可以连接一个或多个关联关系,可以自由使用查询条件到关联查询, 也可以嵌套连接关联查询。如:

// 连接多重关系
// 找出24小时内注册客户包含书籍的订单
$orders = Order::find()->innerJoinWith([
 'books',
 'customer' => function ($query) {
 $query->where('customer.created_at > ' . (time() - 24 * 3600));
 }
])->all();
// 连接嵌套关系:连接 books 表及其 author 列
$orders = Order::find()->joinWith('books.author')->all();

代码背后, Yii 先执行一条 JOIN SQL 语句把满足 JOIN SQL 语句查询条件的主要模型查出, 然后为每个关系执行一条查询语句, bing填充相应的关联记录。

[[yiidbActiveQuery::joinWith()|joinWith()]] 和 [[yiidbActiveQuery::with()|with()]] 的区别是 前者连接主模型类和关联模型类的数据表来检索主模型, 而后者只查询和检索主模型类。 检索主模型

由于这个区别,你可以应用只针对一条 JOIN SQL 语句起效的查询条件。 如,通过关联模型的查询条件过滤主模型,如前例, 可以使用关联表的列来挑选主模型数据,

当使用 [[yiidbActiveQuery::joinWith()|joinWith()]] 方法时可以响应没有歧义的列名。 In the above examples, we useitem.id and order.id to disambiguate the id column references 因为订单表和项目表都包括 id 列。

当连接关联关系时,关联关系默认使用即时加载。你可以 通过传参数 $eagerLoading 来决定在指定关联查询中是否使用即时加载。

默认 [[yiidbActiveQuery::joinWith()|joinWith()]] 使用左连接来连接关联表。 你也可以传 $joinType 参数来定制连接类型。 你也可以使用 [[yiidbActiveQuery::innerJoinWith()|innerJoinWith()]]。

Yii2 分页

控制器 CommentController 里面的任意一个方法,在这里我的方法是 actionComment();

use yiidataPagination;
use appmodelsComment;
 public function actionComment(){
 $data = Comment::find()->andWhere(['id' => '10']);
 $pages = new Pagination(['totalCount' =>$data->count(), 'pageSize' => '2']);
 $model = $data->offset($pages->offset)->limit($pages->limit)->all();
 
 return $this->render('comment',[
 'model' => $model,
 'pages' => $pages,
 ]);
 }

view 里面的代码

<?php
use yiiwidgetsLinkPager;
?>
 foreach($model as $key=>$val)
 {
 这里就是遍历数据
 }
 <?= LinkPager::widget(['pagination' => $pages]); ?>

in() 操作

SELECT * FROM `categ_price` WHERE `id` IN (9, 11)

$categ_price_id=[9>1,11=>3]
 $categPriceModel= commonmodelsCategPrice::find()->where(['id' =>array_keys($categ_price_id)])->all();
 #>where(['id' => [1, 2, 3]])

not in() 操作

SELECT * FROM `shop` WHERE (status=1) AND (`id` NOT IN (88, 93))

$shopModel= Shop::find()->where('status=1')->andWhere(['not in','id',[88,98]])->all();

PHP中文网,有大量免费的Yii入门教程,欢迎大家学习!

文档

yii2怎么查询数据

yii2怎么查询数据:数据查询User::find()->all(); 此方法返回所有数据; User::findOne($id); 此方法返回 主键 id=1 的一条数据(举个例子); User::find()->where(['name' => '小伙儿'])->one(); 此方法返回
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top