旗下导航:搜·么
当前位置:网站首页 > PHP框架 > YII > 正文

yii2怎样查询数据【yii框架教程】,yii2,查询,数据

作者:搜搜PHP网发布时间:2019-12-10分类:YII浏览:105


导读:数据查询User::find()->all();此要领返回一切数据;User::findOne($id);此要领返回主键id=1的一条数据...

数据查询

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 对象的数组,该数组代表当前客户对象的定单集。

定义关联关联运用一个能够返回 [[yii\db\ActiveQuery]] 对象的 getter 要领, [[yii\db\ActiveQuery]]对象有关联上下文的相干信息,因而能够只查询关联数据。

class Customer extends \yii\db\ActiveRecord
{
    public function getOrders()
    {
        // 客户和定单经由过程 Order.customer_id -> id 关联竖立一对多关联
        return $this->hasMany(Order::className(), ['customer_id' => 'id']);
    }
}
 
class Order extends \yii\db\ActiveRecord
{
    // 定单和客户经由过程 Customer.id -> customer_id 关联竖立一对一关联
    public function getCustomer()
    {
        return $this->hasOne(Customer::className(), ['id' => 'customer_id']);
    }
}

以上运用了[[yii\db\ActiveRecord::hasMany()]] 和 [[yii\db\ActiveRecord::hasOne()]]要领。以上两例分别是关联数据多对一关联和一对一关联的建模范例。如,一个客户有许多定单,一个定单只归属一个客户。两个要领都有两个参数并返回[[yii\db\ActiveQuery]]对象。

竖立关联关联后,猎取关联数据和猎取组件属性一样简朴, 实行以下相应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 \yii\db\ActiveRecord
{
    public function getBigOrders($threshold = 100)
    {
        return $this->hasMany(Order::className(), ['customer_id' => 'id'])
            ->where('subtotal > :threshold', [':threshold' => $threshold])
            ->orderBy('id');
    }
}

团结查询

运用关联数据库时,广泛要做的是衔接多个表并明确地运用种种 JOIN 查询。 JOIN SQL语句的查询前提和参数,运用 [[yii\db\ActiveQuery::joinWith()]] 能够重用已定义关联并挪用 而不是运用 [[yii\db\ActiveQuery::join()]] 来实现目标。

// 查找一切定单并以客户 ID 和定单 ID 排序,并贪欲加载 "customer" 表
$orders = Order::find()->joinWith('customer')->orderBy('customer.id, order.id')->all();
// 查找包含书本的一切定单,并以 `INNER JOIN` 的衔接体式格局立即加载 "books" 表
$orders = Order::find()->innerJoinWith('books')->all();

以上要领[[yii\db\ActiveQuery::innerJoinWith()|innerJoinWith()]]是接见INNER JOIN范例的[[yii\db\ActiveQuery::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添补相应的关联纪录。

[[yii\db\ActiveQuery::joinWith()|joinWith()]] 和 [[yii\db\ActiveQuery::with()|with()]] 的区分是 前者衔接主模子类和关联模子类的数据表来检索主模子, 而后者只查询和检索主模子类。 检索主模子

由于这个区分,你能够运用只针对一条 JOIN SQL 语句起效的查询前提。 如,经由过程关联模子的查询前提过滤主模子,如前例, 能够运用关联表的列来遴选主模子数据,

当运用 [[yii\db\ActiveQuery::joinWith()|joinWith()]] 要领时能够相应没有歧义的列名。 In the above examples, we useitem.id and order.id to disambiguate the id column references 由于定单表和项目表都包含 id 列。

当衔接关联关联时,关联关联默许运用立即加载。你能够 经由过程传参数 $eagerLoading 来决定在指定关联查询中是不是运用立即加载。

默许 [[yii\db\ActiveQuery::joinWith()|joinWith()]] 运用左衔接来衔接关联表。 你也能够传 $joinType 参数来定制衔接范例。 你也能够运用 [[yii\db\ActiveQuery::innerJoinWith()|innerJoinWith()]]。

Yii2 分页

控制器 CommentController 内里的恣意一个要领,在这里我的要领是 actionComment();

use yii\data\Pagination;
use app\models\Comment;
  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 yii\widgets\LinkPager;
?>
      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= \common\models\CategPrice::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();

ki4网,有大批免费的Yii入门教程,迎接人人进修!

以上就是yii2怎样查询数据的细致内容,更多请关注ki4网别的相干文章!

标签:yii2查询数据