YII 框架查询
基础查询
Customer::find()->one(); 此方法返回一条数据; Customer::find()->all(); 此方法返回所有数据; Customer::find()->count(); 此方法返回记录的数量; Customer::find()->average(); 此方法返回指定列的平均值; Customer::find()->min(); 此方法返回指定列的最小值 ; Customer::find()->max(); 此方法返回指定列的最大值 ; Customer::find()->scalar(); 此方法返回值的第一行第一列的查询结果; Customer::find()->column(); 此方法返回查询结果中的第一列的值; Customer::find()->exists(); 此方法返回一个值指示是否包含查询结果的数据行; Customer::find()->batch(10); 每次取10条数据 Customer::find()->each(10); 每次取10条数据,迭代查询 //根据sql语句查询:查询name=test的客户
Customer::model()->findAllBySql("select * from customer where name = test"); //根据主键查询:查询主键值为1的数据
Customer::model()->findByPk(1); //根据条件查询(该方法是根据条件查询一个集合,可以是多个条件,把条件放到数组里面)
Customer::model()->findAllByAttributes(['username'=>'admin']); //子查询
$subQuery = (new Query())->select('COUNT(*)')->from('customer');
// SELECT `id`, (SELECT COUNT(*) FROM `customer`) AS `count` FROM `customer`
$query = (new Query())->select(['id', 'count' => $subQuery])->from('customer'); //关联查询:查询客户表(customer)关联订单表(orders),条件是status=1,客户id为1,从查询结果的第5条开始,查询10条数据
$data = (new Query())
->select('*')
->from('customer')
->join('LEFT JOIN','orders','customer.id = orders.customer_id')
->where(['status'=>'1','customer.id'=>'1'])
->offset(5)
->limit(10)
->all()
直接查询
- //createCommand(执行原生的SQL语句)
- $sql= "SELECT u.account,i.* FROM sys_user as u left join user_info as i on u.id=i.user_id";
- $rows=Yii::$app->db->createCommand($sql)->query();
- 查询返回多行:
- $command = Yii::$app->db->createCommand('SELECT * FROM post');
- $posts = $command->queryAll();
- 返回单行
- $command = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=1');
- $post = $command->queryOne();
- 查询多行单值:
- $command = Yii::$app->db->createCommand('SELECT title FROM post');
- $titles = $command->queryColumn();
- 查询标量值/计算值:
- $command = Yii::$app->db->createCommand('SELECT COUNT(*) FROM post');
- $postCount = $command->queryScalar();
关联查询
- /**
- *客户表Model:CustomerModel
- *订单表Model:OrdersModel
- *国家表Model:CountrysModel
- *首先要建立表与表之间的关系
- *在CustomerModel中添加与订单的关系
- */
- Class CustomerModel extends \yii\db\ActiveRecord
- {
- ...
- //客户和订单是一对多的关系所以用hasMany
- //此处OrdersModel在CustomerModel顶部别忘了加对应的命名空间
- //id对应的是OrdersModel的id字段,order_id对应CustomerModel的order_id字段
- public function getOrders()
- {
- return $this->hasMany(OrdersModel::className(), ['id'=>'order_id']);
- }
- //客户和国家是一对一的关系所以用hasOne
- public function getCountry()
- {
- return $this->hasOne(CountrysModel::className(), ['id'=>'Country_id']);
- }
- ....
- }
- // 查询客户与他们的订单和国家
- CustomerModel::find()->with('orders', 'country')->all();
- // 查询客户与他们的订单和订单的发货地址(注:orders 与 address都是关联关系)
- CustomerModel::find()->with('orders.address')->all();
- // 查询客户与他们的国家和状态为1的订单
- CustomerModel::find()->with([
- 'orders' => function ($query) {
- $query->andWhere('status = 1');
- },
- 'country',
- ])->all();
YII 框架查询的更多相关文章
- 三级联动(在YII框架中)
//三级联动 //数据库代码过多就不上传了 //视图 <div class="area"> <table class="table"&g ...
- Yii框架 多表查询实例
Yii框架多表查询实例:总共分为两个步骤(以下的代码我全部都写在model中):1.先在主表model中声明关联表中所需要查询的字段. public $surveyls_description; // ...
- 使用 OAuth2-Server-php 在 Yii 框架上搭建 OAuth2 Server
原文转自 http://www.cnblogs.com/ldms/p/4565547.html Yii 有很多 extension 可以使用,在查看了 Yii 官网上提供的与 OAuth 相关的扩展后 ...
- Yii 框架学习--01 框架入门
Yii 是一个高性能的,适用于开发 WEB2.0 应用的 PHP 框架. Yii目前有两个主要的版本: 2.0 和 1.1.本文以YII 2.0.7为例. 环境需求 Yii2.0 框架有一些系统上的需 ...
- php--yii框架中的ajax分页与yii框架自带的分页
要想使用Yii分页类 第一步:在控制器层加载分页类 use yii\data\Pagination; 第二步: 使用model层查询数据,并用分分页,限制每页的显示条数 $data = Zhao::f ...
- yii框架
Yii Framework是一个基于组件.用于开发大型 Web 应用的高性能 PHP 框架.Yii提供了今日Web 2.0应用开发所需要的几乎一切功能.Yii是最有效率的PHP框架之一.Yii是创始人 ...
- YII框架源码分析(百度PHP大牛创作-原版-无广告无水印)
YII 框架源码分析 百度联盟事业部——黄银锋 目 录 1. 引言 3 1.1.Yii 简介 3 1.2.本文内容与结构 3 2.组件化与模块化 4 2.1.框架加载和运行流程 4 ...
- Yii框架tips(转)
yii的一些小的技巧 http://www.yiichina.com/topic/151 db组件 'schemaCachingDuration'=>3600, 为什么不起做用?需要开缓存 如何 ...
- Yii框架tips
db组件 'schemaCachingDuration'=>3600, 为什么不起做用?需要开缓存 如何在页面下边显示sql的查询时间在log组件的routes中加入 array('class' ...
随机推荐
- eclipse 创建并运行maven web项目
这两天想在eclipse上运行maven web项目,折腾了许久,总算success啦. 1,利用eclipse创建dynamic web project(eclipse需要安装m2eclipse). ...
- HDU 2163 Palindromes
http://acm.hdu.edu.cn/showproblem.php?pid=2163 Problem Description Write a program to determine whet ...
- 在c++中调用exe程序进行操作
#include <Windows.h> #include <iostream> #include <direct.h> #define picNum 228 us ...
- JSON字符串书写
{ "XXX公司": [ { "name": "IT部", "mebers": [ { "维护人员&quo ...
- Xshell访问本地或者远程Linux虚拟机
背景 在本地PC机上安装了VMware workstation和Ubuntu系统,但是每次访问虚拟机都需要输入登陆密码,比较不方便.为此,通过Xshell来访问虚拟机,提高工作效率. 步骤 1.打开虚 ...
- Python爬取B站视频信息
该文内容已失效,现已实现scrapy+scrapy-splash来爬取该网站视频及用户信息,由于B站的反爬封IP,以及网上的免费代理IP绝大部分失效,无法实现一个可靠的IP代理池,免费代理网站又是各种 ...
- Linux特殊字符含义
文件名以 ' . ' 开头的都是隐藏文件或目录,只需要在文件或目录名前添加 ' . ' 就可以隐藏它 ~ 表示主目录 . 当前目录 . . ...
- Necklace - CF613C
Ivan wants to make a necklace as a present to his beloved girl. A necklace is a cyclic sequence of b ...
- Signal函数
Signal函数: 这个函数是一种系统调用,就是告诉系统发生中断的时候用该干嘛.第一个参数就是信号的编号,第二个参数就是信号的指针. 原型: #include <signal.h> voi ...
- BZOJ1060:[ZJOI2007]时态同步——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1060 https://www.luogu.org/problemnew/show/P1131 小Q在 ...