首頁 後端開發 php教程 PHP開發框架Yii Framework教學(26) 資料庫-Active Record範例

PHP開發框架Yii Framework教學(26) 資料庫-Active Record範例

Jan 22, 2017 am 09:27 AM

使用Java或.Net 寫資料庫應用,很多人都用過Hibernate(或NHibernate)可以大大簡化資料庫編程,而以物件的方式來讀寫資料庫(ORM),Yii提供的Active Record (AR) 也是一個流行的物件-關係映射(ORM) 技術。每個 AR 類別代表一個資料表 (或視圖),資料表(或視圖)的列在 AR 類別中體現為類別的屬性,一個 AR 實例則表示表中的一行。 常見的 CRUD 操作作為 AR 的方法實作。因此,我們可以以一種更面向對象的方式存取資料。

這裡修改Yii Framework 開發教學(24) 資料庫-DAO 範例 ,看看使用Active Record如何讀取Employee表。

要存取一個資料表,我們首先需要透過整合 CActiveRecord 定義 一個 AR 類別。 每個 AR 類別代表一個單獨的資料表,一個 AR 實例則代表那個表中的一行。

由於 AR 類別經常在多處被引用 ,我們可以導入包含 AR 類別的整個目錄,而不是一個個導入。 例如,如果我們所有的AR 類別檔案都在protected/models 目錄中,我們可以設定應用如下:

'import'=>array(
'application.models.*',
),
登入後複製

本例定義Employee類別如下:

class Employee extends CActiveRecord
{
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return 'Employee';
}
}
登入後複製

資料表行中所列的值可以作為對應AR 實例的屬性訪問。例如 $employee->EmployeeId 可以存取Employee的 EmployeeId欄位。

本例只是讀取Employee表,修改SiteController的indexAction方法:

public function
actionIndex(){$model = Employee::model()->findAll();
$this->render('index', array('model' => $model,
));}
登入後複製

可以看到只要一行程式碼Employee::model()->findAll()就實作讀取資料庫表並賦值功能,來看看對應的顯示記錄的代碼:

{
echo 'EmployeeId:' . $employee->EmployeeId . '';echo 'First Name:' . $employee->FirstName . '';
echo 'Last Name:' . $employee->LastName . '';echo 'Title:' . $employee->Title . '';
echo 'Address:' . $employee->Address . '';echo 'Email:' . $employee->Email . '';
echo '----------------------';}
?>
登入後複製

可以看到使用AR可以透過資料庫表的欄位名稱(區分大小寫)直接存取某個欄位值,而無需在類別Employee定義,從而大大簡化程式碼。

在前面介紹Model時說過CModel有兩個子類,一個是FormModel,另外一個就是CActiveRecord, CActiveRecord定義了資料庫存取的CRUD方法,例如

建立記錄

要向資料表插入新行,我們要建立一個對應AR 類別的實例,設定其與表格的列相關的屬性,然後呼叫save() 方法完成插入

$employee=new Employee;
$employee->FirstName='James';
$employee->LastName='Shen';
...
$employee->save();
登入後複製

如果表的主鍵是自增的,在插入完成後,AR 實例將包含一個更新的主鍵。如果一個列在表結 構中使用了靜態預設值(例如一個字串,一個數字)定義。

讀取記錄

要讀取數據表中的數據,我們可以通過如下方式調用find 系列方法中的一種

// 查找滿足指定條件的結果中的第一行
$post=Post: :model()->find($condition,$params);
// 找出有指定主鍵值的那一行
$post=Post::model()->findByPk($postID,$condition,$params) ;
// 尋找具有指定屬性值的行
$post=Post::model()->findByAttributes($attributes,$condition,$params);
// 透過指定的SQL 語句找出結果中的第一行
$post=Post::model()->findBySql($sql,$params);如上圖所示,我們透過Post::model() 呼叫find 方法。 請記 住,靜態方法 model() 是每個 AR 類別所必須的。 此方法傳回在物件上下文中的一個用於存取類別層級方法(類似於靜態類別方法的 東西)的 AR 實例。

如果 find 方法找到了一個滿足查詢條件的行,它將傳回一個 Post 實例,實例的屬性含有資料表 行中對應列的值。 然後我們就可以像讀取普通物件的屬性一樣讀取載入的值,例如 echo $post->title;。

如果使用 給定的查詢條件在資料庫中沒有找到任何東西, find 方法將傳回 null 。

呼叫 find 時,我們使用 $condition 和 $params 指定查詢條件。此處 $condition 可以是 SQL 語句中的WHERE 字串,$params 則是一個參數數組,其中的值應綁定 到 $condation 中的佔位符。

更新記錄

在 AR 實例填充了列的值之後,我們可以改變它們並把它們存回資料表。

$post=Post::model()->findByPk(10);
$post->title='new post title';
$post->save(); // 将更改保存到数据库删除记录
登入後複製

如果一個AR 實例被一行資料填充,我們也可以刪除此行資料

$post=Post::model()->findByPk(10); // 假设有一个帖子,其 ID 为 10
$post->delete(); // 从数据表中删除此行注意,删除之后, AR 实例仍然不变,但数据表中相应的行已经没了
登入後複製

其它可以參見Yii中文文件(http://www.yiiframework.com/doc/guide/1.1/zh_cn/database.ar ),這裡不再詳細複述了。

本例顯示結果:

PHP開發框架Yii Framework教學(26) 資料庫-Active Record範例

以上就是PHP開發框架Yii Framework教程(26) 資料庫-Active Record範例的內容,更多相關內容請關注PHP中文網(www.php.cn)!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1247
24
Microsoft NET Framework 安裝問題 錯誤代碼 0x800c0006 修復 Microsoft NET Framework 安裝問題 錯誤代碼 0x800c0006 修復 May 05, 2023 pm 04:01 PM

.NETFramework4是開發人員和最終使用者在Windows上執行最新版本的應用程式所必需的。但是,在下載安裝.NETFramework4時,許多用戶抱怨安裝程式在中途停止,顯示以下錯誤訊息-「 .NETFramework4hasnotbeeninstalledbecauseDownloadfailedwitherrorcode0x800c0006 」。在您的裝置上安裝.NETFramework4時,如果您也在體驗它,那麼您就來對了地方

如何在 Windows 11/10 上使用 SetupDiag 識別 Windows 升級問題 如何在 Windows 11/10 上使用 SetupDiag 識別 Windows 升級問題 Apr 17, 2023 am 10:07 AM

每當您的Windows11或Windows10PC出現升級或更新問題時,您通常會看到一個錯誤代碼,指示故障背後的實際原因。但是,有時,升級或更新失敗可能不會顯示錯誤代碼,這時就會混淆。有了方便的錯誤代碼,您可以確切地知道問題出在哪裡,因此您可以嘗試修復。但是由於沒有出現錯誤代碼,因此識別問題並解決它變得極具挑戰性。這會佔用您大量時間來簡單地找出錯誤背後的原因。在這種情況下,您可以嘗試使用Microsoft提供的名為SetupDiag的專用工具,該工具可協助您輕鬆識別錯誤背後的真

SCNotification 已停止運作 [修復它的 5 個步驟] SCNotification 已停止運作 [修復它的 5 個步驟] May 17, 2023 pm 09:35 PM

身為Windows用戶,您很可能會在每次啟動電腦時遇到SCNotification已停止工作錯誤。 SCNotification.exe是一個微軟系統通知文件,由於權限錯誤和點網故障等原因,每次啟動PC時都會崩潰。此錯誤也以其問題事件名稱而聞名。因此,您可能不會將其視為SCNotification已停止工作,而是將其視為錯誤clr20r3。在本文中,我們將探討您需要採取的所有步驟來修復SCNotification已停止運作,以免它再次困擾您。什麼是SCNotification.e

Microsoft .NET Framework 4.5.2、4.6 和 4.6.1 將於 2022 年 4 月終止支持 Microsoft .NET Framework 4.5.2、4.6 和 4.6.1 將於 2022 年 4 月終止支持 Apr 17, 2023 pm 02:25 PM

已安裝Microsoft.NET版本4.5.2、4.6或4.6.1的MicrosoftWindows用戶如果希望Microsoft將來透過產品更新支援該框架,則必須安裝較新版本的Microsoft框架。據微軟稱,這三個框架都將在2022年4月26日停止支援。支援日期結束後,產品將不會收到「安全修復或技術支援」。大多數家庭設備透過Windows更新保持最新。這些設備已經安裝了較新版本的框架,例如.NETFramework4.8。未自動更新的設備可能

適用於 Windows 11 的KB5012643破壞了.NET Framework 3.5應用程式 適用於 Windows 11 的KB5012643破壞了.NET Framework 3.5應用程式 May 09, 2023 pm 01:07 PM

自從我們談論影響安裝KB5012643forWindows11的用戶的新安全模式錯誤以來已經過去了一周。這個討厭的問題並沒有出現在微軟在發布當天發布的已知問題清單中,因此讓所有人都感到驚訝。好吧,就在您認為情況不會變得更糟的時候,微軟為安裝此累積更新的用戶投下了另一顆炸彈。 Windows11Build22000.652導致更多問題因此,這家科技公司警告Windows11用戶,他們在啟動和使用某些.NETFramework3.5應用程式時可能會遇到問題。聽起來很熟悉?不過請不要驚

Yii2 vs Phalcon:哪個框架更適合開發顯示卡渲染應用? Yii2 vs Phalcon:哪個框架更適合開發顯示卡渲染應用? Jun 19, 2023 am 08:09 AM

在當前資訊時代,大數據、人工智慧、雲端運算等技術已成為了各大企業關注的熱點。在這些技術中,顯示卡渲染技術作為一種高效能圖形處理技術,受到了越來越多的關注。顯示卡渲染技術廣泛應用於遊戲開發、影視特效、工程建模等領域。而對於開發者來說,選擇一個適合自己專案的框架,是一個非常重要的決策。在目前的語言中,PHP是一種相當有活力的語言,一些優秀的PHP框架如Yii2、Ph

如何使用PHP框架Yii開發一個高可用的雲端備份系統 如何使用PHP框架Yii開發一個高可用的雲端備份系統 Jun 27, 2023 am 09:04 AM

隨著雲端運算技術的不斷發展,資料的備份已經成為了每個企業必須要做的事情。在這樣的背景下,開發一款高可用的雲端備份系統尤其重要。而PHP框架Yii是一款功能強大的框架,可以幫助開發者快速建立高效能的Web應用程式。以下將介紹如何使用Yii框架開發一款高可用的雲端備份系統。設計資料庫模型在Yii框架中,資料庫模型是非常重要的一環。因為資料備份系統需要用到很多的表和關

php如何使用Yii3框架? php如何使用Yii3框架? May 31, 2023 pm 10:42 PM

隨著互聯網的不斷發展,Web應用程式開發的需求也越來越高。對於開發人員而言,開發應用程式需要一個穩定、高效、強大的框架,這樣可以提高開發效率。 Yii是一款領先的高效能PHP框架,它提供了豐富的特性和良好的性能。 Yii3是Yii框架的下一代版本,它在Yii2的基礎上進一步優化了效能和程式碼品質。在這篇文章中,我們將介紹如何使用Yii3框架來開發PHP應用程式。

See all articles