《ThinkPHP文章內容組件》由會員分享,可在線閱讀,更多相關《ThinkPHP文章內容組件(13頁珍藏版)》請在裝配圖網上搜索。
1、文章內容組件管理ThinkPHP視圖、關聯模型,講師:馬明,內容組件,視圖模型 關聯模型,,視圖模型,定義視圖模型,只需要繼承ViewModel,然后設置viewFields屬性即可。 classBlogViewModelextendsViewModel public $viewFields=array( Blog=array(id,name,title), Category=array(title=category_name, _on=Blog.category_id=Category.id), User=array(name=username, _on=Blog.user_id=User.
2、id), ); ,,定義視圖模型,Blog=array(id,name,title) _as=myBlog title=category_name _on=Blog.category_id=Category.id _type=LEFT,,視圖查詢,$Model=D(BlogView); $Model-field(id,name,title,category_name,useruame)-where(id10)-order(id desc)-select(); $Model-field(id,name,title,categoryName,userName)-order(id desc)-gro
3、up(id)-select();,,關聯模型,關聯關系 一對一關聯 :ONE_TO_ONE,包括HAS_ONE和BELONGS_TO 一對多關聯 :ONE_TO_MANY,包括HAS_MANY和BELONGS_TO 多對多關聯 :MANY_TO_MANY,,關聯模型,關聯關系必然有一個參照表,例如: 用戶表、用戶分組表、用戶收貨地址表、商品表、訂單表等 每個用戶都有對應的用戶資料檔案,所以屬于HAS_ONE關聯 每個用戶都屬于某個用戶組,所以屬于BELONGS_TO關聯 每個用戶都可以發(fā)表多篇文章,但某個文章只屬于一個用戶,因此屬于HAS_MANY關聯 每個模塊可以屬于多個菜單項,一個菜單項內
4、可以包含多個模塊,因此屬于MANY_TO_MANY關聯,,關聯定義,ThinkPHP可以很輕松的完成數據表的關聯CURD操作,目前支持的關聯關系包括下面四種:HAS_ONE、BELONGS_TO、HAS_MANY、MANY_TO_MANY。 一個模型根據業(yè)務模型的復雜程度可以同時定義多個關聯,不受限制,所有的關聯定義都統(tǒng)一在模型類的 $_link 成員變量里面定義,并且可以支持動態(tài)定義。要支持關聯操作,模型類必須繼承RelationModel類,關聯定義的格式是: protected $_link = array( 關聯1 = array( 關聯屬性1 = 定義, 關聯屬性N = 定義, ),
5、 關聯2 = array( 關聯屬性1 = 定義, 關聯屬性N = 定義, ), ... );,,關聯模型HAS_ONE,HAS_ONE關聯表示當前模型擁有一個子對象,例如,每個用戶都有對應的用戶資料檔案。我們可以建立一個用戶模型UserModel,并且添加如下關聯定義: classUserModelextendsRelationModel public $_link = array( Profile= HAS_ONE, ); 上面是最簡單的方式,表示其遵循了系統(tǒng)內置的數據庫規(guī)范,完整的定義方式是: classUserModelextendsRelationModel public $_
6、link = array( Profile=array( mapping_type =HAS_ONE, class_name =Profile, //定義更多的關聯屬性 ), ); ,,BELONGS_TO,BELONGS_TO 關聯表示當前模型從屬于另外一個父對象,例如每個用戶都屬于一個部門。我們可以做如下關聯定義。 class CategoryModel extends RelationModel public $_link = array( Section = array( mapping_type = BELONGS_TO, class_name = Secti
7、on, foreign_key = sectionid, mapping_name = section, //as_fields = title:section_title, ), ); ,,HAS_MANY,HAS_MANY 關聯表示當前模型擁有多個子對象,例如每個用戶有多篇文章,我們可以這樣來定義 class UserModel extends RelationModel public $_link = array( Article = array( mapping_type = HAS_MANY, class_name = Article, foreign_key = created_b
8、y, mapping_name = article, mapping_order=createddesc, //as_fields = title,alias:art_alias, ), ); ,,MANY_TO_MANY,MANY_TO_MANY 關聯表示當前模型可以屬于多個對象,而父對象則可能包含有多個子對象,通常兩者之間需要一個中間表類約束和關聯。例如每個用戶可以屬于多個組,每個組可以有多個用戶: class UserModel extends RelationModel public $_link = array( “Group = array( mapping_type=MANY_TO_MANY, class_name=Group, mapping_name=groups, foreign_key=userId, relation_foreign_key=goupId, relation_table=think_gourpUser) ); ,,華章培訓網版權所有,,