亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PHP Yii2框架的關(guān)聯(lián)模型使用介紹

 更新時(shí)間:2022年09月02日 14:59:26   作者:PeakXin  
本文對(duì) YII2.0的多表關(guān)聯(lián)查詢做一個(gè)簡單的介紹。文中通過實(shí)例代碼介紹的非常詳細(xì),下面話不多說,來一起看看詳細(xì)的介紹

Active Record 可以將相關(guān)數(shù)據(jù)集中進(jìn)來, 使其可以通過原始數(shù)據(jù)輕松訪問。 例如,客戶數(shù)據(jù)與訂單數(shù)據(jù)相關(guān) 因?yàn)橐粋€(gè)客戶可能已經(jīng)存放了一個(gè)或多個(gè)訂單。這種關(guān)系通過適當(dāng)?shù)穆暶鳎?你可以使用 $customer->orders 表達(dá)式訪問客戶的訂單信息 這表達(dá)式將返回包含 Order Active Record 實(shí)例的客戶訂單信息的數(shù)組。

聲明關(guān)聯(lián)關(guān)系

你必須先在 Active Record 類中定義關(guān)聯(lián)關(guān)系,才能使用 Active Record 的關(guān)聯(lián)數(shù)據(jù)。 簡單地為每個(gè)需要定義關(guān)聯(lián)關(guān)系聲明一個(gè) 關(guān)聯(lián)方法 即可,如下所示,

class Customer extends ActiveRecord
{
    // ...
    public function getOrders()
    {
        return $this->hasMany(Order::className(), ['customer_id' => 'id']);
    }
}
class Order extends ActiveRecord
{
    // ...
    public function getCustomer()
    {
        return $this->hasOne(Customer::className(), ['id' => 'customer_id']);
    }
}

上述的代碼中,我們?yōu)?Customer 類聲明了一個(gè) orders 關(guān)聯(lián), 和為 Order 聲明了一個(gè) customer 關(guān)聯(lián)。

每個(gè)關(guān)聯(lián)方法必須這樣命名:getXyz。然后我們通過 xyz(首字母小寫)調(diào)用這個(gè)關(guān)聯(lián)名。 請(qǐng)注意關(guān)聯(lián)名是大小寫敏感的。

當(dāng)聲明一個(gè)關(guān)聯(lián)關(guān)系的時(shí)候,必須指定好以下的信息:

  • 關(guān)聯(lián)的對(duì)應(yīng)關(guān)系:通過調(diào)用 hasMany() 或者 hasOne() 指定。在上面的例子中,您可以很容易看出這樣的關(guān)聯(lián)聲明: 一個(gè)客戶可以有很多訂單,而每個(gè)訂單只有一個(gè)客戶。
  • 相關(guān)聯(lián) Active Record 類名:用來指定為 hasMany() 或者 hasOne() 方法的第一個(gè)參數(shù)。 推薦的做法是調(diào)用 Xyz::className() 來獲取類名稱的字符串,以便您 可以使用 IDE 的自動(dòng)補(bǔ)全,以及讓編譯階段的錯(cuò)誤檢測生效。
  • 兩組數(shù)據(jù)的關(guān)聯(lián)列:用以指定兩組數(shù)據(jù)相關(guān)的列(hasOne()/hasMany() 的第二個(gè)參數(shù))。 數(shù)組的值填的是主數(shù)據(jù)的列(當(dāng)前要聲明關(guān)聯(lián)的 Active Record 類為主數(shù)據(jù)), 而數(shù)組的鍵要填的是相關(guān)數(shù)據(jù)的列。

一個(gè)簡單的口訣,先附表的主鍵,后主表的主鍵。 正如上面的例子,customer_idOrder 的屬性,而 idCustomer 的屬性。 (譯者注:hasMany() 的第二個(gè)參數(shù),這個(gè)數(shù)組鍵值順序不要弄反了)

訪問關(guān)聯(lián)數(shù)據(jù)

定義了關(guān)聯(lián)關(guān)系后,你就可以通過關(guān)聯(lián)名訪問相應(yīng)的關(guān)聯(lián)數(shù)據(jù)了。就像 訪問一個(gè)由關(guān)聯(lián)方法定義的對(duì)象一樣,具體概念請(qǐng)查看 屬性。 因此,現(xiàn)在我們可以稱它為 關(guān)聯(lián)屬性 了。

// SELECT * FROM `customer` WHERE `id` = 123
$customer = Customer::findOne(123);
// SELECT * FROM `order` WHERE `customer_id` = 123
// $orders 是由 Order 類組成的數(shù)組
$orders = $customer->orders;

提示: 當(dāng)你通過 getter 方法 getXyz() 聲明了一個(gè)叫 xyz 的關(guān)聯(lián)屬性,你就可以像 屬性 那樣訪問 xyz。注意這個(gè)命名是區(qū)分大小寫的。

如果使用 hasMany() 聲明關(guān)聯(lián)關(guān)系,則訪問此關(guān)聯(lián)屬性 將返回相關(guān)的 Active Record 實(shí)例的數(shù)組; 如果使用 hasOne() 聲明關(guān)聯(lián)關(guān)系,訪問此關(guān)聯(lián)屬性 將返回相關(guān)的 Active Record 實(shí)例,如果沒有找到相關(guān)數(shù)據(jù)的話,則返回 null。

當(dāng)你第一次訪問關(guān)聯(lián)屬性時(shí),將執(zhí)行 SQL 語句獲取數(shù)據(jù),如 上面的例子所示。如果再次訪問相同的屬性,將返回先前的結(jié)果,而不會(huì)重新執(zhí)行 SQL 語句。要強(qiáng)制重新執(zhí)行 SQL 語句,你應(yīng)該先 unset 這個(gè)關(guān)聯(lián)屬性, 如:unset($ customer-> orders)

$customer->orders; // 獲得 `Order` 對(duì)象的數(shù)組
$customer->getOrders(); // 返回 ActiveQuery 類的實(shí)例

設(shè)置別名

class Order extends ActiveRecord
{
    // ...
    public function getCustomer()
    {
        return $this->hasOne(Customer::className(), ['id' => 'customer_id'])->alias('c');
    }
}

關(guān)聯(lián)查詢

$order = Order::find()->joinWith('customer')
            ->where(['filter1'=>$filter1, 'filter2'=>$filter2])
            ->andWhere(['=', 'c.filter3', $filter3])
            ->andWhere(['<=', 'cfilter4', $filter4])
            ->one();

到此這篇關(guān)于PHP Yii2框架的關(guān)聯(lián)模型使用介紹的文章就介紹到這了,更多相關(guān)PHP Yii2 關(guān)聯(lián)模型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 講解WordPress中用于獲取評(píng)論模板和搜索表單的PHP函數(shù)

    講解WordPress中用于獲取評(píng)論模板和搜索表單的PHP函數(shù)

    這篇文章主要介紹了WordPress中用于獲取評(píng)論模板和搜索表單的PHP函數(shù),需要的朋友可以參考下
    2015-12-12
  • 漂亮的thinkphp 跳轉(zhuǎn)頁封裝示例

    漂亮的thinkphp 跳轉(zhuǎn)頁封裝示例

    今天小編就為大家分享一篇漂亮的thinkphp 跳轉(zhuǎn)頁封裝示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • WordPress中注冊(cè)菜單與調(diào)用菜單的方法詳解

    WordPress中注冊(cè)菜單與調(diào)用菜單的方法詳解

    這篇文章主要介紹了WordPress中注冊(cè)菜單與調(diào)用菜單的方法詳解,分別依靠register_nav_menus()函數(shù)與wp_nav_menu()函數(shù)的使用,需要的朋友可以參考下
    2015-12-12
  • php樹型類實(shí)例

    php樹型類實(shí)例

    這篇文章主要介紹了php樹型類,涉及數(shù)據(jù)結(jié)構(gòu)與算法中的樹結(jié)構(gòu),實(shí)例相對(duì)簡單易懂,對(duì)于學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • php面向?qū)ο蟪绦蛟O(shè)計(jì)中self與static的區(qū)別分析

    php面向?qū)ο蟪绦蛟O(shè)計(jì)中self與static的區(qū)別分析

    這篇文章主要介紹了php面向?qū)ο蟪绦蛟O(shè)計(jì)中self與static的區(qū)別,結(jié)合實(shí)例形式分析了php面向?qū)ο蟪绦蛟O(shè)計(jì)中self與static的功能、以及在繼承過程中實(shí)現(xiàn)多態(tài)的區(qū)別,并總結(jié)了static靜態(tài)延遲綁定的原理,需要的朋友可以參考下
    2019-05-05
  • php獲取服務(wù)器信息的實(shí)現(xiàn)代碼

    php獲取服務(wù)器信息的實(shí)現(xiàn)代碼

    php獲取服務(wù)器信息的一段代碼,包括獲取mysql數(shù)據(jù)庫版本信息、GD庫信息、php上傳相關(guān)信息等。有需要的朋友,可以參考下
    2013-02-02
  • PHP+MySQL高并發(fā)加鎖事務(wù)處理問題解決方法

    PHP+MySQL高并發(fā)加鎖事務(wù)處理問題解決方法

    這篇文章主要介紹了PHP+MySQL高并發(fā)加鎖事務(wù)處理問題解決方法,結(jié)合實(shí)例形式分析了PHP+MySQL事務(wù)處理相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-04-04
  • 采用PHP函數(shù)memory_get_usage獲取PHP內(nèi)存清耗量的方法

    采用PHP函數(shù)memory_get_usage獲取PHP內(nèi)存清耗量的方法

    PHP性能優(yōu)化過程中需要獲取PHP內(nèi)存消耗,使用memory_get_usage()函數(shù)可獲取當(dāng)前的內(nèi)存消耗情況,函數(shù)使用簡單,這里討論一下memory_get_usage()函數(shù)的用法與實(shí)例
    2011-12-12
  • PHP sprintf()函數(shù)用例解析

    PHP sprintf()函數(shù)用例解析

    sprintf() 函數(shù)把格式化的字符串寫寫入一個(gè)變量中。
    2011-05-05
  • php筆記之常用文件操作

    php筆記之常用文件操作

    php文件操作是phper必須掌握的 雖然用到的機(jī)會(huì)比較少,現(xiàn)在整理一下學(xué)習(xí)的筆記代碼有詳細(xì)的注釋 看起來應(yīng)該沒問題的。
    2010-10-10

最新評(píng)論