[Yii2笔记]006声明AR类(Declaring Active Record Classes) [ 技术分享 ]
说明
学习Yii Framework 2(易2框架)的过程是漫长的,也是充满乐趣的,以下是我学习Yii2框架时对官网英文资料(请参见原文网址)的翻译和代码实现,提供了较完整的代码,供你参考。不妥之处,请多多指正!
原文网址:
http://www.yiiframework.com/doc-2.0/guide-db-active-record.html
http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#declaring-ar-classes
1、Declaring Active Record Classes(声明AR类)
本文主题:声明AR类(Declaring Active Record Classes)
活动记录(Active Record,AR)为数据库中的数据存取和处理提供了一个面向对象(object-oriented)的方式。AR的类与数据库中的表相对应,AR的实例与表中的记录相对应,AR的属性与记录中的字段相对应。作为SQL语句的替代,你可以直接存取AR属性,并调用AR方法去处理存储在数据表中的数据。
例如,Customer是一个AR类,它与customer表相关联,name是customer表中的一个字段。如果要插入一个新行到customer表中,代码如下:
$customer=new Customer();
$customer->name='Qiang';
$customer->save();
上面这些AR代码与以下MySQL语句等效:
$db->createCommand('INSERT INTO `customer` (`name`) VALUES (:name)', [
':name' => 'Qiang',
])->execute();
与AR相比较而言,MySQL语句不太直观,更容易出错,如果使用了另外一种数据库时,还会有兼容性的问题。
Yii提供了Active Record支持以下关系数据库: MySQL 4.1及以上:使用yii\db\ActiveRecord PostgreSQL 7.3及以上:使用yii\db\ActiveRecord SQLite 2和3:使用yii\db\ActiveRecord Microsoft SQL Server2008及以上:使用yii\db\ActiveRecord Oracle:使用yii\db\ActiveRecord CUBRID 9.3及以上:使用yii\db\ActiveRecord Sphinx:使用yii\sphinx\ActiveRecord,需要yii2-sphinx扩展 Elastic Search:使用yii\elasticsearch\ActiveRecord,需要yii2-elasticsearch扩展
另外,Yii也支持Active Record使用以下NoSQL数据库: Redis 2.6.12及以上:使用yii\redis\ActiveRecord,需要yii2-redis扩展 MongoDB 1.3.0及以上:使用yii\mongodb\ActiveRecord,需要yii2-mongodb扩展
在本教程中,我们将主要描述关系数据库的Active Record的用法,尽管如此,此处描述的大多数内容对于NoSQL数据库也是适用的。
1、声明AR类(Declaring Active Record Classes)
首先,需要使用yii\db\ActiveRecord扩展声明一个Active Record类。
1)设置一个表名 每个Active Record默认都与一个数据表相关联,tableName()方法使用yii\helpers\Inflector::camel2id()将类名称转换为表名。如果表名称未遵守此项约定,你可以重写此方法。 也可以使用一个默认表前缀(tablePrefix),例如:如果表前缀是tbl_,Customer类对应的表名就是tbl_customer,OrderItem对应tbl_order_item。 如果一个表名为{{%TableName}},百分号%将被替换为表前缀,例如{{%post}}变为{{tbl_post}},表名两边的大括号是SQL查询中的引用符。 在下例中,我们将为customer表声明一个名为Customer的Active Record类:
文件位置:
D:\phpwork\basic\models\Customer.php
源代码:
namespace app\models;
use yii\db\ActiveRecord;
class Customer extends ActiveRecord{
const STATUS_INACTIVE = 0;
const STATUS_ACTIVE = 1;
/**
* @return string the name of the table associated with this ActiveRecord class.
*/
//定义MariaDB表
public static function tableName(){
return '{{customer}}';
}
//定义MongoDB表
public static function collectionName()
{
return 'orders';
}
}
测试
http://localhost:8081/customer
2)Active records被称为模型(models) Active Record实例被视为模型(moels),正因为如此,我们通常将Active Record放在app\models命名空间下(或其他保存model类文件的命名空间)。因为yii\db\ActiveRecord继承自yii\base\Model,它具有model的所有特性,例如属性、验证规则、数据序列化等。
(全文完)
共 0 条回复
阿江
最后登录:2024-03-03
在线时长:186小时21分
- 粉丝94
- 金钱16816
- 威望160
- 积分20276