yii2 如何使用数据库(二) 之使用ActiveRecord
来源:互联网 发布:mac打不开google 编辑:程序博客网 时间:2024/06/07 05:41
- 他们是什么
- ActiveRecord 介绍和用法
- Active Record
- 声明ActiveRecord类
- 用AR类查询数据
- yiidbActiveRecordfind
- yiidbActiveRecordfindBySql
- 得到AR类之后访问列数据
- 操作数据CRUD
- 用ActiveRecord查询关联数据
- 写入关联关系
- 从AR对象中获得我们需要的值
上一节我们讲到了CreatCommand数据库的方法,也说到了这种方法的优缺点这节,我们讲一下更为好用的上述两种方法
他们是什么?
ActiveRecord和QueryBulider是建立在DAO层基础上的,更为增强和常用的数据库访问方法。
ActiveRecord 介绍和用法
Active Record
Active Record (活动记录,以下简称AR)提供了一个面向对象的接口,用以访问数据库中的数据。
* 一个 AR 类关一张数据表,每个 AR 对象对应表中的一行。
* AR对象的属性,对应为数据行的列
* 可以直接以面向对象的方式来操纵数据表中的数据,这样就不需要写SQL语句就能实现数
据库的访问。
我们会在下面对这几个做出介绍
声明ActiveRecord类
通过继承 yii\db\ActiveRecord 基类来声明一个AR类,并实现tableName方法,返回与之相关联的数据表的名称。
这样就建立了一个关于table的AR类
如:
class Article extends \yii\db\ActiveRecord{ /** * @inheritdoc */ public static function tableName() { return 'article'; } ……
用AR类查询数据
AR 提供了两个静态方法来构建 DB 查询,并且把查询到的数据填充到 AR 对象实例里,最后返回这个对象。
yii\db\ActiveRecord::find()
$model = ArticleStatus::find()->where(['id'=>1])->one();
find后面跟的where方法,它的参数就是查询条件id=1,根据查询条件,应该是会取得表中的第一条记录,one方法就会实际去执行查询,并用查询结果来填充一个AR类的实例对象。这个对象就是返回值,我们用变量model来保存,这就是和数据库表中id=1这条记录对应的一个ActiveRecord对象
可简写为
$model = ArticleStatus::findOne(1)
$model = ArticleStatus::findAll(['status'=>2)
同样我们可以在类参考手册里面看到
find()方法实现了ActiveQueryinterface这个接口,我们看看这个接口到底有些什么
Creates an yii\db\ActiveQueryInterface instance for query purpose.
我大概归类了一下
yii\db\ActiveRecord::findBySql()
用sql语句查询,和CreateCommand()不同的是,他返回的是AR对象
得到AR类之后访问列数据
- 查询单个对象时的AR对象
$model = article::findOne(1);echo $model -> id;
- 查询多个数组
$model = article::findAll(['status'=>2);foreach($model as $item){ echo $item->id;}
操作数据CRUD
AR类提供了下面这些方法实现CRUD操作
1. Create
$article = new Article();$article->title = '测试';$article->content = '测试内容';$article->save(); //等同于insert()
- Read
$article = Article::findOne(1);
- Update
$article = Article::findOne(1);$article->title = "测试1";$article->save(); //等同于update()
- Delect
$article = Article::findOne(1);$article -> delect();
用ActiveRecord查询关联数据
我们操作数据库的时候经常会碰到需要联表查询的情况。 这时候我们就需要用到ActiveRecord的关联查询方法
写入关联关系
首先我们需要在控制器中写入关联关系,比如我要查询文章这个表,里面有个作者id,我需要联表查询,对应的作者名称。
那么我们就需要在控制器里用hasone或者hasmany方法。
例:
public function getAuthor() { return $this->hasOne(Admin::className(), ['id' => 'author_id']); }
graph LRAdmin::className-->提取出Admin这个模型类的表名
从AR对象中获得我们需要的值
然后我们所需要的作者名称就会加载我们的AR对象中。
echo $model->author->username;
就能得到我们的值
还有更多的AR类的操作可以去到 ActiveQueryInterface的类参考手册
- yii2 如何使用数据库(二) 之使用ActiveRecord
- yii2 如何使用数据库(三) 之使用QueryBulider
- yii2 如何使用数据库(一)之使用createCommand()
- Yii2学习之ActiveRecord
- 使用Castle.ActiveRecord的注意事项之二:级联
- yii2.0 使用数据库
- Castle ActiveRecord 中使用Access数据库
- 抛开rails使用ActiveRecord连接数据库
- Yii2 使用三 使用数据库
- Yii2之使用javascript
- yii2中如何使用modal弹窗之基本使用
- Yii2 使用二 了解MVC
- [我的PHP之旅] YII框架学习 03.连接数据库(使用ActiveRecord)
- yii2.0如何使用ActionForm
- Yii2中如何使用CodeCeption
- Yii2如何使用Yii:t()
- yii2.0如何使用ActionForm
- yii2 如何使用数据小部件之DetailView
- 浅谈java对象浅度克隆和深度克隆
- docker: Error response from daemon: unauthorized: incorrect username or password.
- yii2 如何使用数据库(一)之使用createCommand()
- 游戏作业
- centos 7安装rabbitmq
- yii2 如何使用数据库(二) 之使用ActiveRecord
- 指数与对数名字的由来
- yii2 如何使用数据库(三) 之使用QueryBulider
- [LeetCode] 647. Palindromic Substrings
- 低层次的努力,注定你过不好这一生
- yii2控制器中附加行为behavior()方法使用
- C++面试总结
- hp电脑开机显示正在准备自动修复,进不了系统
- 内部类与外部类