資料庫之AR
資料庫之AR
Active Record (AR) 是一個流行的 物件-關係對映 (ORM) 技術。 每個 AR 類代表一個資料表(或檢視),資料表(或檢視)的列在 AR 類中體現為類的屬性,一個 AR 例項則表示表中的一行。
– yiichina
gii
這裡簡單提一下gii 具體百度一下,你就知道
是YII的程式碼生成工具
下面使用的User類就是gii生成的
CRUD
C
public function actionCreate()
{
//$user = new User; //例項化userModel
//或
//$user = User::model();
//$user->setIsNewRecord(true);
//給對應的欄位賦值
$user->username = "框架";
$user->status = 0;
$user->city = 5;
//插入資料
//這裡值得細說的是 IsNewRecord變數為true
//場景(scenario)為insert
//具體看 實現原理
if($user->save())
{
echo '插入成功';
}else
{
var_dump($user->errors);
}
}
C實現原理
例項化 User model
$user = new User;
User extends CActiveRecord 呼叫 CActiveRecord的構造方法
public function __construct($scenario='insert')
{
//使用 靜態方法 model例項化物件 場景(scenario)為空
if($scenario===null) // internally used by populateRecord() and model()
return;
$this->setScenario($scenario); //設定場景為 insert
$this->setIsNewRecord(true); //設定 這個一條新紀錄
//獲得欄位的預設值
$this->_attributes=$this->getMetaData()->attributeDefaults;
$this->init(); //一個空方法 子類可以自己重寫
$this->attachBehaviors($this->behaviors()); //繫結行為
$this->afterConstruct(); //觸發 構造結束事件
}
R
public function actionRead()
{
$user = User::model()->find();
//這裡的場景(Scenario)仍然是update哦
$user = User::model()->find('id = :id',array(':id'=>5));
var_dump($user);
}
public function actionReadAll()
{
$user = User::model()->findAll();
$user = User::model()->findAll('id > :lid and id < :mid',array(':lid'=>5,':mid'=>10));
var_dump($user);
}
public function actionReadCriteria()
{
$criteria = new CDbCriteria();
// $criteria->addCondition('id > :lid');
// $criteria->addCondition('id < :mid');
// $criteria->addBetweenCondition('id', 5, 10); //包含 5 和 10
// $criteria->addInCondition('id',array(4,5,6));
// $criteria->params = array(':lid'=>5,':mid'=>10);
$criteria->addSearchCondition('username', 'g%' ,false);
$criteria->addSearchCondition('username', 'g');
$criteria->order = 'id desc';
// $criteria->limit = 2;
// $criteria->offset = 1;
$user = User::model()->findAll($criteria);
var_dump($user);
}
R實現原理
find()和findall()
//建立一個 條件物件 CDbCriteria類
$criteria=$this->getCommandBuilder()
->createCriteria($condition,$params);
//查詢
return $this->query($criteria,true);
U
public function actionUpdate()
{
$id = Yii::app()->request->getParam('id');
$user = User::model()->findByPk($id);
$user->username = "被我改了吧";
//這裡值得細說的是 IsNewRecord變數為false
//場景(scenario)為update
//具體看 實現原理
if($user->save())
{
echo '修改成功';
}else
{
var_dump($user->errors);
}
}
U實現原理
$user = User::model()->findByPk($id);
呼叫的User的 靜態方法model
public static function model($className=__CLASS__)
{
return parent::model($className);
}
呼叫父類 CActiveRecord 類的 model方法
public static function model($className=__CLASS__)
{
if(isset(self::$_models[$className]))
return self::$_models[$className];
else
{
//例項化類
$model=self::$_models[$className]=new $className(null);
//繫結行為
$model->attachBehaviors($model->behaviors());
return $model;
}
}
D
public function actionDelete()
{
$id = Yii::app()->request->getParam('id');
$user = User::model()->findByPk($id);
if($user->delete())
{
echo '刪除成功';
} else {
var_dump($user->errors);
}
}
D實現原理
沒有什麼特別的
if(!$this->getIsNewRecord())
{
Yii::trace(get_class($this).'.delete()','system.db.ar.CActiveRecord');
if($this->beforeDelete())
{
$result=$this->deleteByPk($this->getPrimaryKey())>0;
$this->afterDelete();
return $result;
}
else
return false;
}
場景和新紀錄
場景(scenario)
新紀錄(IsNewRecord)
1.場景的作用更多體現在 insert 和 update上,這也是預設的場景只有insert和update
new User()
場景被賦值成insert
User::model()
在 query()
的時候 呼叫 populateRecords()
賦值成update
節選自yiichina網友的一片博文,比較好的描述了yii中場景的作用
2.新紀錄一般用來區別insert和其他操作
相關文章
- 資料庫AR之關聯查詢資料庫
- 大資料圖資料庫之TAO資料庫大資料資料庫
- (資料庫之pymysql)資料庫MySql
- 資料庫之DAO資料庫
- 國產資料庫調研之——AntDB資料庫資料庫
- 資料庫系統概述之國產資料庫資料庫
- 資料庫升級之-資料泵資料庫
- 資料庫安全之金融資料庫
- MySQL資料庫之索引MySql資料庫索引
- luffy之資料庫配置資料庫
- Go之資料庫操作Go資料庫
- 資料庫之建立索引資料庫索引
- mongoDB資料庫之聚合MongoDB資料庫
- oracle 之資料庫核查Oracle資料庫
- 資料庫國產化實戰之達夢資料庫資料庫
- 資料庫系統概述之資料庫最佳化資料庫
- IOS資料儲存之Sqlite資料庫iOSSQLite資料庫
- IOS資料儲存之FMDB資料庫iOS資料庫
- MySQL預設資料庫之mysql庫MySql資料庫
- MySQL預設資料庫之sys庫MySql資料庫
- Postgresql10資料庫之更改資料庫的名稱SQL資料庫
- SequoiaDB資料庫之資料庫的配置與啟動資料庫
- 【轉】Oracle資料庫優化之資料庫磁碟I/OOracle資料庫優化
- 資料庫升級之-XTTS資料庫TTS
- 資料庫設計之思考資料庫
- 資料庫被刪之反思資料庫
- 資料庫操作之遊標資料庫
- python之資料庫支援Python資料庫
- 不同Oracle資料庫之間的資料同步Oracle資料庫
- 異構資料庫之間資料作業資料庫
- 資料庫遷移之資料泵實驗資料庫
- 資料庫發展階段之資料庫系統階段資料庫
- 常見資料庫系統比較之Oracle資料庫(轉)資料庫Oracle
- oracle之 oracle database vault(資料庫保險庫)OracleDatabase資料庫
- Android資料儲存之SQLCipher資料庫加密AndroidSQL資料庫加密
- MySQL資料庫工具類之——DataTable批量加入MySQL資料庫(Net版)MySql資料庫
- 紹Oracle資料庫的最佳化之資料庫磁碟I/OOracle資料庫
- SQL2K資料庫開發四之刪除資料庫SQL資料庫