阿江 2017-09-30 15:13:55 2042次浏览 0条回复 0 0 0

说明

学习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的所有特性,例如属性、验证规则、数据序列化等。

(全文完)

    没有找到数据。
您需要登录后才可以回复。登录 | 立即注册