ActiveRecord活动记录类

一.声明AR类(模型层)

namespaceapp\models;

useyii\db\ActiveRecord;

classCustomer extends ActiveRecord

{

/**

*@return string 返回该AR类关联的数据表名

*/

publicstatic function tableName()

{

return 'customer';

}

}

输出sql:createCommand()->getRawSql();

二.使用AR类进行增删改查(控制器层)

//"id" 和"mail" 是 $customer 对象所关联的数据表的对应字段名

$id    = $customer->id;

$email= $customer->email;

AR提供了两种方法来构建 DB 查询并向 AR 实例里填充数据:

yii\db\ActiveRecord::find()

yii\db\ActiveRecord::findBySql()

1.简单查询方法

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()->asArray()->one();    以数组形式返回一条数据;

Customer::find()->asArray()->all();    以数组形式返回所有数据;

Customer::find()->where($condition)->asArray()->one();    根据条件以数组形式返回一条数据;

Customer::find()->where($condition)->asArray()->all();    根据条件以数组形式返回所有数据;

Customer::find()->where($condition)->asArray()->orderBy('idDESC')->all();    根据条件以数组形式返回所有数据,并根据ID倒序;

2.findOne()和findAll()

// 查询年龄为30,状态值为1的客户

$customer = Customer::findOne(['age' =>30, 'status' => 1]);

$customer =Customer::find()->where(['age' => 30, 'status' => 1])->one();

// 查询id值为10,11,12的客户

$customers = Customer::findAll([10, 11,12]);

$customers =Customer::find()->where(['id' => [10, 11, 12]])->all();

3.where()条件

$customers = Customer::find()->where($cond)->all();

$cond写法举例:

// SQL: (type = 1) AND (status = 2).

$cond =['type' => 1, 'status' => 2]

// SQL:(id IN (1, 2, 3)) AND (status = 2)

$cond =['id' => [1, 2, 3], 'status' => 2]

//SQL:status IS NULL

$cond = ['status' => null]

[[and]]:将不同的条件组合在一起,用法举例:

//SQL:`id=1 AND id=2`

$cond = ['and', 'id=1', 'id=2']

//SQL:`type=1 AND (id=1 OR id=2)`

$cond = ['and', 'type=1', ['or', 'id=1','id=2']]

[[or]]:

//SQL:`(type IN (7, 8, 9) OR (id IN (1, 2,3)))`

$cond = ['or', ['type' => [7, 8, 9]],['id' => [1, 2, 3]]

[[not]]:

//SQL:`NOT (attribute IS NULL)`

$cond = ['not', ['attribute' => null]]

[[between]]: not between 用法相同

//SQL:`id BETWEEN 1 AND 10`

$cond = ['between', 'id', 1, 10]

[[in]]: not in 用法类似

//SQL:`id IN (1, 2, 3)`

$cond = ['in', 'id', [1, 2, 3]]

//IN条件也适用于多字段

$cond = ['in', ['id', 'name'], [['id' =>1, 'name' => 'foo'], ['id' => 2, 'name' => 'bar']]]

//也适用于内嵌sql语句

$cond = ['in', 'user_id', (newQuery())->select('id')->from('users')->where(['active' => 1])]

[[like]]:

//SQL:`name LIKE '%tester%'`

$cond = ['like', 'name', 'tester']

//SQL:`name LIKE '%test%' AND name LIKE'%sample%'`

$cond = ['like', 'name', ['test','sample']]

//SQL:`name LIKE '%tester'`

$cond = ['like', 'name', '%tester', false]

此外,您可以指定任意运算符如下

//SQL:`id >= 10`

$cond = ['>=', 'id', 10]

//SQL:`id != 10`

$cond = ['!=', 'id', 10]

3.增删改

// 插入新客户的记录

$customer = new Customer();

$customer->name = 'James';

$customer->email = 'james@example.com';

$customer->save();  // 等同于 $customer->insert();

// 更新现有客户记录

$customer = Customer::findOne($id);

$customer->email = 'james@example.com';

$customer->save();  // 等同于 $customer->update();

// 删除已有客户记录

$customer = Customer::findOne($id);

$customer->delete();

// 删除多个年龄大于20,性别为男(Male)的客户记录

Customer::deleteAll('age > :age ANDgender = :gender', [':age' => 20, ':gender' => 'M']);

// 所有客户的age(年龄)字段加1:

Customer::updateAllCounters(['age' =>1]);

4.两表联查

4.两表联查

[[ActiveRecord::hasOne()]]:返回对应关系的单条记录

[[ActiveRecord::hasMany()]]:返回对应关系的多条记录

//客户表Model:CustomerModel

//订单表Model:OrdersModel

//首先要建立表与表之间的关系

//在CustomerModel中添加与订单的关系

模型层:

Class CustomerModel extends\yii\db\ActiveRecord

{

...

public function getOrders()

{

//客户和订单是一对多的关系所以用hasMany

//此处OrdersModel在CustomerModel顶部别忘了加对应的命名空间

//id对应的是OrdersModel的id字段,order_id对应CustomerModel的order_id字段

return $this->hasMany(OrdersModel::className(), ['id'=>'order_id']);

}

}

控制器层:

public function actionIndex{

$customer= Customer::find()->where(['name'=>'zhangsan'])->one();

$orders= $customer->getOrders();

或者

$orders= $customer->orders;   // 魔术方法自动补全getOrders();

//关联查询的多次查询

$customer= Customer::find()->with('order')->all();

foreach($customeras $customer){

$orders = $customer ->orders;

}

}

视图层向控制器层传值

首先在所在的视图层  use yii\helpers\Url;使用

Get方式

其次使用<?= Url::to(['控制器/方法'])?>?参数=值

Active Record 活动记录的更多相关文章

  1. 架构模式数据源模式之:表数据入口(Table Data Gateway)、行数据入口(Row Data Gateway)、活动记录(Active Record)

    一:表数据入口(Table Data Gateway) 表数据入口提供了用于访问单个表或者视图(也包含了联表查询)的所有SQL,通常一个表一个类.其它代码通过它来实现对数据库的交互.基于这个特点,表数 ...

  2. Active Record快速入门指南

    一.概述 Active Record(中文名:活动记录)是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录.关系型数据库往往通过外键来表述实体关系,A ...

  3. 架构模式中的Active Record和Data Mapper

    架构模式中的Active Record和Data Mapper 概念 在简单应用中,领域模型是一种和数据库结构一致的简单结构,对应每个数据库表都有一个领域类,在这种情况下,有必要让每个对象负责数据库的 ...

  4. .NET应用架构设计—适当使用活动记录模式代替领域模型模式

    阅读目录: 1.背景介绍 2.简单介绍领域模型模式.活动记录模式 3.活动记录模式的简单示例及要点 4.总结 1.背景介绍 对软件开发方法论有兴趣的博友应该发现最近“领域驱动设计”慢慢的被人发现被人实 ...

  5. Yii的学习(4)--Active Record

    摘自Yii官网:http://www.yiiframework.com/doc/guide/1.1/zh_cn/database.ar 在官网原文的基础上添加了CDbCriteria的详细用法. 虽然 ...

  6. DAL、DAO、ORM、Active Record辨析

    转自:http://blog.csdn.net/suiye/article/details/7824943 模型 Model 模型是MVC中的概念,指的是读取数据和改变数据的操作(业务逻辑).一开始我 ...

  7. Active Record Query Interface 数据查询接口(界面) 看到第8节。

    http://guides.rubyonrails.org/active_record_querying.html ✅How to find records using a variety of me ...

  8. 函数调用堆栈及活动记录 堆栈溢出 stack overflow

    小结: 1.当被调函数返回主调函数时,被调函数的 活动记录-activation record / 堆栈帧-stack frame 被 弹出-popping 程序执行栈-program executi ...

  9. SpringBoot与MybatisPlus整合之活动记录(十五)

    活动记录和正常的CRUD效果是一样的,此处只当一个拓展,了解即可 pom.xml <dependencies> <dependency> <groupId>org. ...

  10. 小书MybatisPlus第5篇-Active Record模式精讲

    本文为一个系列中的第五节,前四节访问如下地址: 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总结 小书Mybatis ...

随机推荐

  1. IT工具知识-12:RTL8832AU网卡在WIN10更新KB5015807后出现无法正常连接的一种解决方法

    系统配置 硬件配置 使用网卡为Fenvi的FU-AX1800 USB外置网卡(官网驱动同AX1800P) 问题描述 在win10自动更新了KB5015807出现了wifi开机无法自动连接,wifi图标 ...

  2. getchar()函数的详解以及使用时需要注意的一些细节-C语言基础

    这篇文章要探讨的是"getchar()函数的详解以及使用时需要注意的一些细节".涉及getchar()函数的应用和需要注意的问题.属于C语言基础篇(持续更新). 在C语言的学习过程 ...

  3. El_获取域中存储的值和El_获取域中存储的值_对象值

    2获取值 1.el表达式只能从域对象中获取值 2语法: 1.$[域名称.键}:从指定域中获取指定键的值域名称:1.pageScope2.requestScope 3.sessionScope 4.ap ...

  4. 实验2 数组、指针与C++标准库

    实验任务5: Info.hpp #ifndef INFO_HPP #define INFO_HPP #include<iostream> #include<iomanip> # ...

  5. 查看服务器cpu 核心数

    cpu相关信息所在文件是 /proc/cpuinfo 物理cpu数 # grep "physical id" /proc/cpuinfo | sort | uniq | wc -l ...

  6. 使用shell 方式对 vcenter 进行补丁升级

    使用shell 方式对 vcenter 进行补丁升级 背景:最近VMware官网发布了最新的VMware vCenter Server 7.0 iso补丁文件,为了安全起故此对vCenter 进行安全 ...

  7. Android studio软件的安装过程详解

    步骤详解 进入官网,下载相关软件 官网地址:https://developer.android.google.cn/studio/ 点击该页面里面的这个按钮,就能够很轻松地完成下载操作: 弹出弹窗,继 ...

  8. cl 编译器环境配置

    安装 visual studio 2019 其他版本路径可能有差别,需自行对照查找. visual studio 2019安装目录 和 Windows kits 文件夹[在同一目录下] 即VS 如果安 ...

  9. 65.C++的输入流和输出流

    1.流的概念和流类库的结构   程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是从程序将数据传送给输出文件.   C++输入输出包含以下三个方面的内容:   对系统指定的标准设备的输入和输 ...

  10. IntelliJ IDEA 下载安装及配置使用教程(图文步骤详解)

    前言 壹哥在前面的文章中,带大家下载.安装.配置了Eclipse这个更好用的IDE开发工具,并教会了大家如何在Eclipse中进行项目的创建和代码编写.运行.但是实际上,在各种IDE开发工具中,Ecl ...