《ThinkPHP文章內(nèi)容組件》由會(huì)員分享,可在線閱讀,更多相關(guān)《ThinkPHP文章內(nèi)容組件(13頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、文章內(nèi)容組件管理ThinkPHP視圖、關(guān)聯(lián)模型,講師:馬明,內(nèi)容組件,視圖模型 關(guān)聯(lián)模型,,視圖模型,定義視圖模型,只需要繼承ViewModel,然后設(shè)置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();,,關(guān)聯(lián)模型,關(guān)聯(lián)關(guān)系 一對(duì)一關(guān)聯(lián) :ONE_TO_ONE,包括HAS_ONE和BELONGS_TO 一對(duì)多關(guān)聯(lián) :ONE_TO_MANY,包括HAS_MANY和BELONGS_TO 多對(duì)多關(guān)聯(lián) :MANY_TO_MANY,,關(guān)聯(lián)模型,關(guān)聯(lián)關(guān)系必然有一個(gè)參照表,例如: 用戶表、用戶分組表、用戶收貨地址表、商品表、訂單表等 每個(gè)用戶都有對(duì)應(yīng)的用戶資料檔案,所以屬于HAS_ONE關(guān)聯(lián) 每個(gè)用戶都屬于某個(gè)用戶組,所以屬于BELONGS_TO關(guān)聯(lián) 每個(gè)用戶都可以發(fā)表多篇文章,但某個(gè)文章只屬于一個(gè)用戶,因此屬于HAS_MANY關(guān)聯(lián) 每個(gè)模塊可以屬于多個(gè)菜單項(xiàng),一個(gè)菜單項(xiàng)內(nèi)
4、可以包含多個(gè)模塊,因此屬于MANY_TO_MANY關(guān)聯(lián),,關(guān)聯(lián)定義,ThinkPHP可以很輕松的完成數(shù)據(jù)表的關(guān)聯(lián)CURD操作,目前支持的關(guān)聯(lián)關(guān)系包括下面四種:HAS_ONE、BELONGS_TO、HAS_MANY、MANY_TO_MANY。 一個(gè)模型根據(jù)業(yè)務(wù)模型的復(fù)雜程度可以同時(shí)定義多個(gè)關(guān)聯(lián),不受限制,所有的關(guān)聯(lián)定義都統(tǒng)一在模型類的 $_link 成員變量里面定義,并且可以支持動(dòng)態(tài)定義。要支持關(guān)聯(lián)操作,模型類必須繼承RelationModel類,關(guān)聯(lián)定義的格式是: protected $_link = array( 關(guān)聯(lián)1 = array( 關(guān)聯(lián)屬性1 = 定義, 關(guān)聯(lián)屬性N = 定義, ),
5、 關(guān)聯(lián)2 = array( 關(guān)聯(lián)屬性1 = 定義, 關(guān)聯(lián)屬性N = 定義, ), ... );,,關(guān)聯(lián)模型HAS_ONE,HAS_ONE關(guān)聯(lián)表示當(dāng)前模型擁有一個(gè)子對(duì)象,例如,每個(gè)用戶都有對(duì)應(yīng)的用戶資料檔案。我們可以建立一個(gè)用戶模型UserModel,并且添加如下關(guān)聯(lián)定義: classUserModelextendsRelationModel public $_link = array( Profile= HAS_ONE, ); 上面是最簡(jiǎn)單的方式,表示其遵循了系統(tǒng)內(nèi)置的數(shù)據(jù)庫(kù)規(guī)范,完整的定義方式是: classUserModelextendsRelationModel public $_
6、link = array( Profile=array( mapping_type =HAS_ONE, class_name =Profile, //定義更多的關(guān)聯(lián)屬性 ), ); ,,BELONGS_TO,BELONGS_TO 關(guān)聯(lián)表示當(dāng)前模型從屬于另外一個(gè)父對(duì)象,例如每個(gè)用戶都屬于一個(gè)部門(mén)。我們可以做如下關(guān)聯(lián)定義。 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 關(guān)聯(lián)表示當(dāng)前模型擁有多個(gè)子對(duì)象,例如每個(gè)用戶有多篇文章,我們可以這樣來(lái)定義 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 關(guān)聯(lián)表示當(dāng)前模型可以屬于多個(gè)對(duì)象,而父對(duì)象則可能包含有多個(gè)子對(duì)象,通常兩者之間需要一個(gè)中間表類約束和關(guān)聯(lián)。例如每個(gè)用戶可以屬于多個(gè)組,每個(gè)組可以有多個(gè)用戶: 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) ); ,,華章培訓(xùn)網(wǎng)版權(quán)所有,,