yii的relations方法的使用

 

yii的relations方法的使用

 7300人閱讀 評論(1) 收藏 舉報
 分類:

通過在 relations() 中聲明這些相關對象,我們就可以利用強大的 Relational ActiveRecord (RAR) 功能來訪問資訊的相關對象,例如它的作者和評論。不需要自己寫複雜的 SQL JOIN 語句。



  • 前提條件

在組織數據庫時,需要使用主鍵與外鍵約束才能使用ActiveReocrd的關係操作;

  • 場景

申明關係

兩張表之間的關係無非三種:一對多;一對一;多對多; 在AR中,定義了四種關係:

關係 定義 例子
BELONGS_TO A和B的關係是一對多,那麼B屬於A Post屬於User
HAS_MANY A和B之間的關係是一對多,那麼A有多個B User有多個Post
HAS_ONE 這是HAS_MANY的一種特殊情況,A至多有一個B User至多有一個Profile
MANY_MANY 這個對應多對多的情況,在AR裏會將多對多以BELONGS_TO和HAS_MANY的組合來解釋 Post和Category

在AR中通過重寫CActiveRecord類的relations()方法來申明關係;這個方法返回一個關係配置的數組;一個數組無素代表一個單獨的關係,格式如下:

'VarName'=>array('RelationType','ClassName','ForeignKey', ...additional options)

Var Name 關係名
Relation Type 四種關係:self::BELONGS_TO, self::HAS_ONE, self::HAS_MANY, self::MANY_MANY
Class Name 代表當前AR類要關聯的那個AR類名
Foreign Key 實現關係的外鍵, 有可能有多個,即列名

  • 'select': string|array, 被選中的列列表。默認值爲 '*',這意味着是所有列。 如果它們出現在一個表達式中(例如: COUNT(relationName.name) AS name_count)。
  • 'condition': string, WHERE子句。 默認值爲空。 注意,列引用需要加入'relationName'前綴 。(例如:relationName.age>20)
  • 'order': string, ORDER BY子句。 默認值爲空。 注意,列引用需要加入'relationName'前綴 。(例如:relationName.age DESC)
  • 'with': string|array, 應該與這個對象一起裝載的子對象相關名單。 注意,這僅僅是延遲加載,而不是預先加載。
  • 'joinType': 聯接類型。 默認值爲‘LEFT OUTER JOIN’。
  • 'alias': 關係與關聯表的別名。 它默認爲null, 意味着表的別名與關係名稱相同。
  • 'params': 參數綁定到要生成的SQL語句上。 這應作爲名稱-值的數組。
  • 'on': ON 子句。 此處指定的條件將追加到使用 AND 運算符的聯接條件。
  • 'index': 其值應作爲存儲相關的對象的數組的鍵的列的名稱。 此選項僅適用於, HAS_MANY 和 MANY_MANY 關係。
  • 'scopes': 應用範圍。在單一的範圍情況下可以像'scopes'=>'scopeName', 在多個作用域範圍情況下可以使用數組像這樣'scopes'=>array('scopeName1','scopeName2')。 此選項自版本 1.1.9 可用。

延遲加載時有一定的關係,下列選項可用:
  • 'group': string, GROUP BY子句。 默認值爲空。 注意,列引用需要加入'relationName'前綴 。(例如: relationName.age)。此選項僅適用於HAS_MANY 和 MANY_MANY 關係。
  • 'having': string, HAVING子句。 默認值爲空。 注意,列引用需要加入'relationName'前綴 。(例如: relationName.age)。此選項僅適用於HAS_MANY 和 MANY_MANY 關係。
  • 'limit': 數據行的limit選擇。 這個選項不能應用到BELONGS_TO。
  • 'offset': 數據行的偏移量。 這個選項不能應用到BELONGS_TO。
  • 'through': 獲取相關的數據時將用作橋的模型的關係的名稱。可以設置僅爲 HAS_ONE 和 HAS_MANY。此選項自版本 1.1.7 可用。
發佈了69 篇原創文章 · 獲贊 21 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章