摘要:在里面對數(shù)據(jù)庫操作有一個很方便的功能就是多表關(guān)聯(lián),通過在里面指定對某個表的關(guān)聯(lián),這樣就可以很快得到相關(guān)信息而不需要自己去寫復(fù)雜的語句。
在 Yii 里面對數(shù)據(jù)庫操作有一個很方便的功能就是多表關(guān)聯(lián),通過在 model 里面指定對某個表的關(guān)聯(lián),這樣就可以很快得到相關(guān)信息而不需要自己去寫復(fù)雜的 sql 語句。
下面我們拿 user 表和 news 表舉例。(一個用戶發(fā)表了多篇文章)
首先,我們需要在我們需要的 model 里面的配置 relation :
User Model:
public function relations() { return array( "news" => array(self::HAS_MANY, "News", "uid", "order"=>"nid DESC"), ); }
在 news 表中我們有一個 uid 字段對應(yīng)著 user 表的 primary key (uid),因為 uid 是 user 表的索引,所以這里只用指定 news 表中的字段即可。
當(dāng)我們需要指定其他的字段時可以這樣寫:
"news" => array(self::HAS_MANY, "News", array("uid"=>"user_id") ), //這樣就是news 表中字段uid與user表中user_id對應(yīng)
我們執(zhí)行如下的代碼看效果:
$user = User::app()->model()->fingByPk( $uid ); printr( $user );
在我們?nèi)〕龅?$user 中就會存在 news 的信息:
$allnews = $user->news; foreach( $allnews as $new ) { printr( $new ); }
這樣我們就完成了簡單的兩個表之間的關(guān)聯(lián)。在上面的例子中我們會看到 self::HAS_MANY 這個東西,在 Yii 里面還有其他的幾種關(guān)系:
HAS_ONE // 一對一 HAS_MANY // 一對多 BELONGS_TO // 多對一 MANY_TO_MANY // 多對多
在 News Model 中我們也可以指定那樣一個 relation:
News Model:
public function relations() { return array( "user" => array(self::BELONGS_TO, "User", "uid"), ); }
在我們?nèi)〕龅?news 中每一條都會附帶上 User 的數(shù)據(jù),方便操作。
$allnews = News::app()->model()->findAll(); foreach( $allnews as $new ) { printr( $new->user ); }
其他的兩種情況就不演示了,同樣的道理。
在上面的例子中我們會看到前一個有一個 order 參數(shù),而第二個沒有。這個很好理解,就相當(dāng)于我們 sql 語句中的條件。常見的條件有:
condition order with joinType select params on alias together group having index
還有用于lazy loading 的:
limit // 只取5個或10個 offset through
官方手冊:
"posts"=>array(self::HAS_MANY, "post", "author_id", "order"=>"posts.create_time DESC", "with"=>"categories")
詳細(xì)的語法可以去看官方文檔。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/20967.html
摘要:今天把這個問題講明白了,看看是怎么個多表關(guān)聯(lián)以及如何去優(yōu)化這個關(guān)聯(lián)。現(xiàn)需要在列表展示表的來源渠道,且該渠道可搜索。關(guān)聯(lián)表字段增加查詢中的搜索模型也是通過實現(xiàn)的,該模型通過控制著哪個字段可搜索,哪個字段不可搜索。 作者:白狼 出處:http://www.manks.top/yii2_many_ar_relation_search.html 本文版權(quán)歸作者,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留...
摘要:前言是特有的用于多表關(guān)聯(lián)查詢的函數(shù),平時在使用多表關(guān)聯(lián)查詢的時候建議使用它們。需求分析使用一條查詢語句就能把列表的數(shù)據(jù)全部展現(xiàn)出來,列表包含一對一,一對多,以及多對多的關(guān)系。不能破壞自有的表頭排序功能,以及中的存值。相關(guān)資料中多表關(guān)聯(lián)查詢 前言 hasOne、hasMany是Yii2特有的用于多表關(guān)聯(lián)查詢的函數(shù),平時在使用多表關(guān)聯(lián)查詢的時候建議使用它們。為什么?因為這種方式關(guān)聯(lián)查詢出來...
摘要:前言是特有的用于多表關(guān)聯(lián)查詢的函數(shù),平時在使用多表關(guān)聯(lián)查詢的時候建議使用它們。需求分析使用一條查詢語句就能把列表的數(shù)據(jù)全部展現(xiàn)出來,列表包含一對一,一對多,以及多對多的關(guān)系。不能破壞自有的表頭排序功能,以及中的存值。相關(guān)資料中多表關(guān)聯(lián)查詢 前言 hasOne、hasMany是Yii2特有的用于多表關(guān)聯(lián)查詢的函數(shù),平時在使用多表關(guān)聯(lián)查詢的時候建議使用它們。為什么?因為這種方式關(guān)聯(lián)查詢出來...
摘要:前言是特有的用于多表關(guān)聯(lián)查詢的函數(shù),平時在使用多表關(guān)聯(lián)查詢的時候建議使用它們。需求分析使用一條查詢語句就能把列表的數(shù)據(jù)全部展現(xiàn)出來,列表包含一對一,一對多,以及多對多的關(guān)系。不能破壞自有的表頭排序功能,以及中的存值。相關(guān)資料中多表關(guān)聯(lián)查詢 前言 hasOne、hasMany是Yii2特有的用于多表關(guān)聯(lián)查詢的函數(shù),平時在使用多表關(guān)聯(lián)查詢的時候建議使用它們。為什么?因為這種方式關(guān)聯(lián)查詢出來...
摘要:第二個參數(shù)是一個數(shù)組,其中鍵為所關(guān)聯(lián)的模型中的屬性,值為當(dāng)前模型中的屬性。這里注意中的第二個是指關(guān)聯(lián)的中的,第一個是指中的。 首先先來說明一下表結(jié)構(gòu) 表結(jié)構(gòu) 現(xiàn)在有訂單表、用戶表、商品清單表、商品庫存表 showImg(https://segmentfault.com/img/bVRcME?w=833&h=244); showImg(https://segmentfault.com/i...
閱讀 3640·2023-04-26 02:07
閱讀 3150·2021-09-22 15:55
閱讀 2534·2021-07-26 23:38
閱讀 3119·2019-08-29 15:16
閱讀 2008·2019-08-29 11:16
閱讀 1746·2019-08-29 11:00
閱讀 3583·2019-08-26 18:36
閱讀 3165·2019-08-26 13:32