標籤:
Thinkphp(3.2.3版本)可以完成資料表的關聯CURD操作,目前支援的關聯關係包括HAS_ONE,BELONG_TO,HAS_MANY,MANY_TO_MANY;
以HAS_ONE為例:
HAS_ONE關聯表示當前模型擁有一個子物件,例如,每個員工都有一個人事檔案。我們可以建立一個使用者模型UserModel,並且添加如下關聯定義:
<?phpnamespace Home\Model;use Think\Model\RelationModel;class UserModel extends RelationModel{ protected $_link = array( ‘Profile‘=>array( ‘mapping_type‘ => self::HAS_ONE, ‘class_name‘ => ‘Profile‘, // 定義更多的關聯屬性 …… ), );}?>
關聯HAS_ONE支援的關聯屬性有:
mapping_type :關聯類別型
這個在HAS_ONE 關聯裡面必須使用HAS_ONE 常量定義。
class_name :要關聯的模型類名
例如,class_name 定義為Profile的話則表示和另外的Profile模型類關聯,這個Profile模型類是無需定義的,系統會自動定位到相關的資料表進行關聯。
mapping_name :關聯的映射名稱,用於擷取資料用
該名稱不要和當前模型的欄位有重複,否則會導致關聯資料擷取的衝突。如果mapping_name沒有定義的話,會取class_name的定義作為mapping_name。如果class_name也沒有定義,則以數組的索引作為mapping_name。
foreign_key : 關聯的外鍵名稱
外鍵的預設規則是當前資料對象名稱_id,例如: UserModel對應的可能是表think_user (注意:think只是一個表首碼,可以隨意配置) 那麼think_user表的外鍵預設為 user_id,如果不是,就必須在定義關聯的時候顯式定義 foreign_key 。
condition : 關聯條件
關聯查詢的時候會自動帶上外鍵的值,如果有額外的查詢條件,可以通過定義關聯的condition屬性。
mapping_fields : 關聯要查詢的欄位
預設情況下,關聯查詢的關聯資料是關聯表的全部欄位,如果只是需要查詢個別欄位,可以定義關聯的mapping_fields屬性。
as_fields :直接把關聯的欄位值對應成資料對象中的某個欄位
這個特性是ONE_TO_ONE 關聯特有的,可以直接把關聯資料對應到資料對象中,而不是作為一個關聯資料。當關聯資料的欄位名和當前資料對象的欄位名稱有衝突時,還可以使用映射定義。
Thinkphp學習日記:關聯模型