10 關聯模型《ThinkPHP6 入門到電商實戰》

一、什么是關聯模型

關聯模型指在 tp 中使用模型對多個數據表進行關聯。例如一個主賬戶表與一個賬戶信息表進行關聯,此時兩者關聯后可以更加簡便的進行操作,使代碼更加清晰,操作更加簡便。

二、 正向一對一關聯

一對一關聯指的是數據只有一條而非多條。

首先我們有一個 user 表如下:
在這里插入圖片描述
接著給 student 表添加對應的 uid 列:
在這里插入圖片描述
隨后我們在model 文件夾下創建一個 User 的php 文件用于模型:
在這里插入圖片描述
在 User 模型表中編寫代碼:

<?php
namespace app\model;
use think\Model;class UserModel extends Model
{protected $name = 'user';
}

接著咱們在 User 模型中編寫對應的關聯代碼(想要關聯多張表在創建一個對應表名的方法和表模型即可):

<?php
namespace app\model;
use think\Model;class UserModel extends Model
{protected $name = 'user';public function student(){return $this->hasOne(StudentModel::class,'uid');}
}

在 student 方法中,hasOne 表示一對一關聯,其中第一個參數 StudentModel::class 表示關聯的表,而第二個參數表示其表中所關聯的外鍵為 uid。

接著我們直接使用模型進行查詢,看看是否成功關聯。我們在 index 類中更改 usemodel 方法:

public function useModel(){$user = UserModel::find(7); return json($user->student->name); 
}

其中 UserModel 直接find 主鍵id 為 7 的數據,接著直接使用 json 返回 user 表下所關聯的 student 表中的 name字段,查看是否成功獲取,最后訪問該方法的結果如下,成功獲取到了數據:
在這里插入圖片描述

三、 反向一對一關聯

有了正向關聯后反向關聯咱們可以不用進行編寫,但是你想編寫也行,咱們在 student 模型類中編寫代碼如下:

<?php
namespace app\model;
use think\Model;class StudentModel extends Model
{protected $name = 'student';public function user() { return $this->belongsTo(UserModel::class); } 
}

四、一對多關聯

一對多關聯指主表關聯的數據在副表中有多條對應,例如此時我在副表中右如下數據:
在這里插入圖片描述
此時 uid 的值是有兩條重復的,那么我們此時修改對應的 user 模型中的方法:

public function student(){//return $this->hasOne(StudentModel::class,'uid');return $this->hasMany(StudentModel::class,'uid');
}

修改 hasOne 成 hasMany 即可,此時修改對應的useModel 方法如下:

public function useModel(){$user = UserModel::find(['uid'=>20]); return json($user->student); 
}

結果如下:
在這里插入圖片描述

此時還可以進行鏈式操作,查詢身高大于 168 的數據:

public function useModel(){$user = UserModel::find(['uid'=>20]); return json($user->student()->where('height','>',168)->select()); 
}

結果如下:
在這里插入圖片描述

五、關聯模型的數據新增

使用關聯模型進行數據新增,可直接使外鍵進行增加,只要考慮數據的新增即可,以下是代碼示例:

public function useModel(){$user = UserModel::find(7); $res=$user->student()->saveAll([ ['name'=>'關聯數據1', 'height'=>0], ['name'=>'關聯數據2', 'height'=>0] ]);dump($res);}

此時我們首先是使用了 find,隨后直接給與 student 數據新增,新增時不需要傳入對應的 uid 數據,因為之前在模型中已經進行了設置外鍵,那么訪問后數據庫成功新增數據:
在這里插入圖片描述
此時成功操作后所返回的內容是對應的模型數組:
在這里插入圖片描述

六、關聯刪除

關聯刪除可使刪除主表數據時同時刪除副表數據,以下為示例:

public function useModel(){$user = UserModel::with('student')->find(7); $res=$user->together(['student'])->delete();dump($res);
}

在這里要注意,需要使用 with 方法,隨后使用 together 傳入一個副表數組,可以傳入多個副表進行刪除,返回值為布爾值:
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285955.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285955.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285955.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

阿里云云計算ACP考試知識點(標紅為重點)

阿里云云計算專業認證考試&#xff08;ACP&#xff09;&#xff08;ECS&#xff09; 什么是云服務器 ECS 云服務器 Elastic Compute Service&#xff08;ECS&#xff09;是阿里云提供的一種基礎云計算服務。使用云服務器 ECS 就像使用水、電、煤氣等資源一樣便捷、高效。您無需…

C語言試題六十二之請編寫函數fun除了字符串前導和尾部的*號之外,將串中其他*號全部刪除。形參h已指向字符串第一個字母,形參p已指向字符串中最后一個字母。在編寫程序時,不得使用c語言提供的字符串函數。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 請編寫函數…

Android 整體設計及背后意義

目錄 1. Android設計的現實意義 1.1 發展的前提&#xff1a;硬件抽象 1.2 能力的樞紐&#xff1a;組件化 1.3 應用的基礎-接口層 2. 對于我們的象征意義和實踐 3. 小結 阿里妹導讀&#xff1a;現實工作中經常可以聽到這樣的說法&#xff1a;框架的升級帶來協議性能的提升…

數學的意蘊與價值(建議收藏)

數學的意蘊與價值,內容包括數學運算、長度面積等位換算等等,建議收藏。 意蘊1: 1x8+1=912x8+2=98123x8+3=9871234x8+4=987612345x8+5=98765123456x8+6=9876541234567x8+7=987654312345678x8+8=98765432123456789x8+9=987654321意蘊2: 1x9+2=1112x9+3=111123x9+4=11111234x9…

85、交換機安全MAC層***配置實驗之Port-Security

1、Port Security解析觸發Port Security的條件&#xff1a;未授權的MAC地址端口MAC地址數量超過了限制觸發Port Security后的動作&#xff1a;protect Security violation protect mode 丟棄數據&#xff0c;不發送SNMP Trap消息 restrict Security violation restr…

C#-Linq源碼解析之Concat

前言在Dotnet開發過程中&#xff0c;Concat作為IEnumerable的擴展方法&#xff0c;十分常用。本文對Concat方法的關鍵源碼進行簡要分析&#xff0c;以方便大家日后更好的使用該方法。使用Concat 連接兩個序列。假如我們有這樣的兩個集合&#xff0c;我們需要把兩個集合進行連接…

11 驗證器《ThinkPHP6 入門到電商實戰》

注&#xff1a;示例來源于官方手冊 一、驗證器定義 驗證器用于對數據進行驗證&#xff0c;你可以理解為一個“層”&#xff0c;在傳入數據時可以使用這個層對數據進行驗證&#xff0c;這樣就可以不用頻繁的在方法中編寫代碼去驗證&#xff0c;只需要編寫一個驗證層即可&#…

合作開發和委托開發完成成果的歸屬

據專利法第8條的規定&#xff1a;“兩個以上單位或者個人合作完成的發明創造、一個單位或者個人接受其他單位或者個人委托所完成的發明創造&#xff0c;除另有協議的以外&#xff0c;申請專利的權利屬于完成或者共同完成的單位或者個人&#xff1b;申請被批準后&#xff0c;申請…

C語言試題六十三之請編寫函數fun:將s所指字符串中ascii值為偶數的字符刪除,串中剩余字符形成一個新串放在t所指的數組中。

1、 題目 請編寫函數fun,其功能是:將s所指字符串中ascii值為偶數的字符刪除,串中剩余字符形成一個新串放在t所指的數組中。 2 、溫馨提示 C語言試題匯總里可用于計算機二級C語言筆試、機試、研究生復試中C程序設計科目、幫助C語言學者打好程序基礎、C語言基礎,鍛煉您…

nginx+php

nginxphp基礎架構 生產實踐 nginx配置文件: 主配置文件 123456789101112131415161718192021222324252627282930313233[rootlinux-node1 conf.d]# cat /etc/nginx/nginx.conf user nginx;worker_processes auto;error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load…

【ArcGIS風暴】ArcGIS10.8中柵格數據金字塔的來龍去脈,你知道嗎?

如下圖所示,通常情況下,當將沒有金字塔的柵格數據集添加至 ArcGIS時,系統將提示您構建金字塔。金字塔指不同比例下分辨率降低的數據概視圖。金字塔十分有用,因為金字塔提升了分辨率低于其全分辨率的柵格數據集的繪制速度。建議構建用于大型柵格數據集的金字塔。 點擊【是】…

斯坦福大學Andrew Ng - 機器學習筆記(8) -- 推薦系統 大規模機器學習 圖片文字識別...

大概用了一個月&#xff0c;Andrew Ng老師的機器學習視頻斷斷續續看完了&#xff0c;以下是個人學習筆記&#xff0c;入門級別&#xff0c;權當總結。筆記難免有遺漏和誤解&#xff0c;歡迎討論。 鳴謝&#xff1a;中國海洋大學黃海廣博士提供課程視頻和個人筆記&#xff0c;在…

表單按鈕實現 type=image

<input type"image" src"http://img01.51jobcdn.com/im/2012/index/main_login_btn.gif" border"0" οnfοcus"blur()">轉載于:https://www.cnblogs.com/zxmbest1/p/5121666.html

.NET7之MiniAPI(特別篇) .NET Preview5參數綁定

.NET Preview5中&#xff0c;給MiniAPI帶來了一個參數綁定的功能&#xff0c;看到這個功能&#xff0c;我一下子就開心了&#xff0c;因為它提供了一個把松散的傳入數據或注入功能耦合在一起的能力&#xff0c;并且可以根據自己的需求自由組合&#xff0c;結合上原來的Fromxxx(…

C語言試題六十四之請編寫函數fun:求勾股數

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 請編寫函數…

【CSS動效實戰(純CSS與JS動效)】02 flex 布局實戰(仿 JD 及 gitCode 布局)及 media 自適應初探 下

二、flex 仿 gitCode 布局 及 自適應 首先查看我們的頁面&#xff1a; 這個時候直接頂部一個塊&#xff0c;下面分為左中右三個塊&#xff0c;然后就解決了&#xff0c;是不是很簡單&#xff1f;相比剛剛那么這個簡單多了。那就來做吧。 2.1 基本布局 首先給一個 style 價格…

C語言按行和列求平均成績代碼(指針,二維數組)

如下所示成績表,如何按行(每個人)或按列(每門課)的平均成績? 結果: 文章目錄 1. 自定義行平均函數2. 自定義列平均函數3. main()函數調用平均函數1. 自定義行平均函數 float save(float **PA,int M,int

架構師必須知道的架構設計原則

目錄 一、前言 二、軟件設計原則 GRASP通用職責分配軟件模式 1. 信息專家(Information Expert) 2. 創建者(Creator) 3. 低耦合(Low Coupling) 4. 高內聚(High Cohesion) 5.控制器(Controller) 6. 多態(Polymorphism) 7. 純虛構(Pure Fabrication) 8. 間接(Indirectio…

LeetCode:Minimum Path Sum(網格最大路徑和)

Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path. Note: You can only move either down or right at any point in time. 典型的動態規劃問題。 設dp[i][j]表示從左…

delete在js里為引用刪除

delete 運算符從對象中刪除一個屬性&#xff0c;或從數組中刪除一個元素。delete expressionexpression 參數是一個有效的 JScript 表達式&#xff0c;通常是一個屬性名或數組元素。說明如果 expression 的結果是一個對象&#xff0c;且在 expression 中指定的屬性存在&#xf…