【tp5】關聯(lián)模型的使用方式

做項目時總時喜歡使用db函數快速操作數據庫,但是這樣子會導致一個控制器內包含多至數據庫所有表的操作,第一不大美觀,第二不利于代碼的反復使用,違背了低耦合高內聚(是不是這樣子???)的原則??!
所以我決定又撿起了許久沒啃的model關聯(lián)
不逼一下自己怎么能知道放棄是多么舒服呢!
不對。。。。怎么能知道關聯(lián)是多么好用呢

  • 首先,學習關聯(lián)能讓自己對tp多一份熟悉
  • 第二,減少了控制器中對數據庫的操作,轉為通過model層對數據庫操作,符合MVC思想
  • 第三,沒有第三,開始記錄吧。。。
以下是本人對tp5文檔的理解總結,絕非照搬照抄

一對一關聯(lián)

何為一對一?舉個栗子
有個用戶表user,里面一用戶張三

id: 1
nickname: 張三
create_time: 2021-02-08

有個用戶料表profile,有且只有張三的一條用戶資料,修改也只是在這條數據上修改

id: 1,
user_id: 1,
mobile: 13345601201,
avatar: '/imgs/user/avatar.png'
so,就可以在model中操作了
  1. 創(chuàng)建model
php think make:model user
php think make:model profile

生成對應model
在模型user中,設置對應資料的關聯(lián)關系,因為是一對一關系,所以用hasOne來關聯(lián),然后在模型profile中設置相對關聯(lián)

User.php
public function profile() {
    return $this->hasOne('Profile');
    默認關聯(lián)id為對應model的名稱,例當前profile對應外鍵為user_id,若不為默認外鍵,則在第二個參數中指定
    return $this->hasOne('Profile', 'member_id');
}
Profile.php
public function user() {
    return $this->belongsTo('Profile');
    規(guī)則同上
}

在隨便一個不知名的控制器中敲入

use app\model\User;

$user = User::get(1);
或者使用預載入的方式
$user = User::with('profile')->select([1]);
dump($user->profile); 

就能打印出profile中對應張三的資料了

  1. 對對應關聯(lián)模型的數據操作
$user = User::get(1);
修改
$user->profile->mobile = 13333333333;
$user->profile->save();
新增
$user->profile->save(['mobile' => 13333333333]);
那有個問題,如果一對一關聯(lián)使用到多個的數據類型上會怎樣?(不是我杠精,要秉承科學嚴謹的態(tài)度)例如

一個用戶可以有多個地址,那會打印出什么?我試了一下
他會打印出最新的一條,不是按id來排列

待更新。。。。
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 現(xiàn)在我們設計了一個如下的數據庫表,需要設計出 tp5 相應的關聯(lián)模型,并能進行相應的查詢。 我們先來分析一下各個表...
    風聲233閱讀 15,227評論 3 7
  • 前言: 大家在使用tp5的時候,操作數據庫的方法有很多,你使用哪一種呢?我個人是比較推薦使用ORM的方式來操作數據...
    祥哥去哪里閱讀 1,669評論 0 2
  • 一、關聯(lián)模型 在關系型數據庫中,表之間有一對一、一對多、多對多的關系。在 TP5 中,實現(xiàn)了ORM (Object...
    中v中閱讀 952評論 0 1
  • 設計模式是什么? 你知道哪些設計模式,并簡要敘述? 設計模式是一種編碼經驗,就是用比較成熟的邏輯去處理某一種類型的...
    卑微的戲子閱讀 685評論 0 1
  • 設計模式是什么? 你知道哪些設計模式,并簡要敘述? 設計模式是一種編碼經驗,就是用比較成熟的邏輯去處理某一種類型的...
    iOS菜鳥大大閱讀 814評論 0 1

友情鏈接更多精彩內容