首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Yii 框架關聯查詢 with() 用法詳解

     編輯:PHP 相關知識

Yii 框架關聯查詢 with() 用法詳解

Yii 四種關聯關係:BELONGS_TO、HAS_ONE、HAS_MANY、MANY_MANY,搭配 with() 實現急切載入。

關係定義對照表

關係含義範例參數順序
BELONGS_TO屬於(多對一)Post 屬於 User關聯表、外鍵欄位(主表存子表 PK)
HAS_ONE有一個(一對一)User 有一個 Profile關聯表、外鍵欄位(子表存主表 PK)
HAS_MANY有多個(一對多)User 有多個 Post關聯表、外鍵欄位(子表存主表 PK)
MANY_MANY多對多Post 與 Tag關聯表、中介表(關聯欄位)

實際範例

Model 定義

return array(
    'author' => array(self::BELONGS_TO, 'User', 'author_id'),
    'comments' => array(self::HAS_MANY, 'Comment', 'post_id', 'with' => 'author', 'order' => 'create_time DESC'),
    'tags' => array(self::MANY_MANY, 'Tag', 'post_tag(post_id, tag_id)', 'order' => 'name'),
);

Controller 使用

$posts = Post::model()->with('author', 'comments', 'tags')->findAll();

進階選項

  • select:指定查詢欄位 'select' => 'id,title'
  • condition:額外條件 'condition' => 'status=1'
  • limit/offset:限制筆數(不適用 BELONGS_TO)
  • group/having:分組查詢(僅 HAS_MANY、MANY_MANY)
  • through:中介模型(1.1.7+,僅 HAS_ONE、HAS_MANY)

善用 with() 可避免 N+1 查詢問題,大幅提升關聯資料讀取效能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved