Thinkphp學習日記:關聯模型

來源:互聯網
上載者:User

標籤:

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學習日記:關聯模型

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.