<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                >[info] **主表建立關聯關系** >hasOne('關聯從表模型名','從表外鍵名','主表主鍵名',\['模型別名定義'\],'join類型,默認`INNER`'); 返回HasOne類對象 | 參數 | 說明 | | --- | --- | | model | 關聯的從表模型名,該參數被定義時,與之對應當前模塊下必須有個與此參數名相同的模塊文件;如果不是前模塊而是跨模塊,此參數為帶有完整的命名空間的模型名 | | foreignKey | 從表外鍵名,默認為:當前模型名_id | | localKey | 主表的主鍵名 | | alias | 定義此模型的別名.`5.0.5+`版本開始,模型別名定義參數已經廢棄。 | | joinType | join類型,默認`INNER` | ## **定義** 定義一對一關聯,例如,一個用戶都有一個個人資料, user表(主表) ![](https://img.kancloud.cn/b8/10/b8105f74178cb588590809c2de5ce7e1_251x49.png) profile(從表) ![](https://img.kancloud.cn/04/68/0468a56482248422c8bca17d3980f272_367x43.png) **主表建立關聯關系例子:** 定義主表對應的`User`模型如下: ~~~ namespace app\index\model; use think\Model; class User extends Model { //定義關聯方法 public function userRelationProfile() { return $this->hasOne('Profile'); //默認情況下, 我們使用的是`user_id`作為外鍵關聯,如果不是的話則需要在關聯定義的時候指定 //return $this->hasOne('Profile','uid'); //`V5.0.3+`版本開始,可以支持為關聯模型定義需要查詢的字段;如果使用的是`join`方式的關聯,不支持指定field字段。 //return $this->hasOne('Profile')->field('id,name,email'); //跨模塊需要完整的命名空間 //return $this->hasOne('\app\api\Profile'); } } ~~~ ## **關聯查找** 在主表的User模型的profile方法定義好關聯之后,就可以使用下面的方法獲取關聯數據: ~~~ $user=\app\index\model\User::get(1); echo $user->id; echo $user->username; //注意這里和with的參數一致 即定義的駝峰樣式的關聯方法名稱轉成小寫+_組成的字符串 echo $user->user_relation_profile->phone; //或者 $user=\app\index\model\User::with('user_relation_profile')->find(1); echo $user->id; echo $user->username; echo $user->user_relation_profile->phone; //::with()返回的是Query對象 //::get()返回的是model對象 ~~~ >[danger] 有一點需要注意的是,關聯方法的命名規范是駝峰法,而關聯屬性則一般是小寫+下劃線的方式,系統在獲取的時候會自動轉換對應,讀取`user_profile`關聯屬性則對應的關聯方法應該是`userProfile`。 如果要根據關聯表的查詢條件查詢當前模型的數據,可以使用`hasWhere`方法,例如: ~~~ $user = \app\index\model\User::hasWhere('user_relation_profile',['phone'=>'0086-010-66778899'])->find(); echo $user->username; ~~~ ## **關聯新增** 系統會自動把當前模型的主鍵傳入profile模型。 ``` //id為2則自動解析為user_id和下面的數據一并自動插入到profile中 $user = User::get(2); // 如果還沒有關聯數據 則進行新增 注意userRelationProfile是我們定義的關聯方法 $user->userRelationProfile()->save(['mobile' => '12345678909','phone' => '0825-123456']); ``` ![](https://img.kancloud.cn/ff/33/ff33011a992f35d8a27f6b02805d07e6_382x21.png) 一般是更新模型時也同時更新關聯模型 ``` $user =model('user'); $user->pwd = 'qwer123456'; $user->username = 'dash'; if ($user->save()) { // 寫入關聯數據 $profile['phone'] = '0825-123456'; $profile['mobile'] = '12334178908'; $user->userRelationProfile()->save($profile); return $user->username . ' 新增成功'; } else { return $user->getError(); } ``` ## **關聯更新** 和新增一樣使用`save`方法進行更新關聯數據。 ~~~ $user = User::get(1); $user->user_relation_profile->phone= 18700000000; $user->user_relation_profile->save(); // 或者 $user->user_relation_profile->save(['phone' => 18700000000]); ~~~ 一般的業務需求也是主表和從表同時更新 ~~~ public function update($id) { $user = model('user')::get($id); $user->username = 'tom'; if ($user->save()) { // 更新關聯數據 $user->user_relation_profile->phone=18700000000; $user->user_relation_profile->save(); return $user->phone. ' 更新成功'; } else { return $user->getError(); } } 訪問:http://tp5.com/user/update/2 進行更新 ~~~ ## 綁定屬性到父模型(`V5.0.4+`) 可以在定義關聯模型的時候使用bind方法綁定屬性到父模型,例如: ~~~ namespace app\index\model; use think\Model; class User extends Model { //定義關聯方法 public function userRelationProfile() { return $this->hasOne('Profile','user_id')->bind(['dianhua'=>'phone', 'mobile'.'profile_id'=>'id']); } } ~~~ 這樣在獲取數據的時候可以直接拿到關聯模型的數據了 ``` $user=\app\index\model\User::get(1); echo $user->id; echo $user->username; echo $user->dianhua; echo $user->mobile; echo $user->profile_id; ``` 綁定關聯屬性不影響原有關聯屬性的讀取,綁定關聯模型的屬性支持讀取器。 > 如果不是預載入查詢,請使用模型的appendRelationAttr方法追加屬性。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看