詳細解析Laravel Model模型關聯
本篇文章為大家帶來了關於laravel的相關知識,其中主要介紹了關於Model模型關聯的相關問題,包括了一對一、一對多、多對多等內容,下面一起來看一下,希望對大家有幫助。
【相關推薦:laravel影片教學】
定義關聯關係
資料庫表通常會相互關聯。
例如,一篇部落格文章可能有許多評論,或一個訂單對應一個下單用戶。 Eloquent 讓這些關聯的管理和使用變得簡單,並支援多種類型的關聯:常見的為前三種,在此我們也只講解前三種關聯
- ##一對一
- 一對多
- 多對多
- 遠端一對多
- 遠端一對一
- 一對一(多態關聯)
- 一對一(多態關聯)
- 多對多
一對一
範例: 兩個資料表:
guest 使用者表和
guestinfo使用者資訊
其中
guest 表中的主鍵
id欄位對應
guestinfo中的外鍵
user_id欄位
首先建立兩個model檔案:
php artisan make:model Guest##php artisan make:model Guestinfo
Guest model檔案:
class Guest extends Model{ use HasFactory; // 设置Guest模型对应的数据表 protected $table = 'guest'; // 关闭create_time和update_time字段自动管理 public $timestamps = false; // 设置与guestinfo的关联方法,方法名建议使用被关联表的名字 public function guestinfo(){ // hasOne(被关联的名命空间,关联外键,关联的主键) return $this->hasOne('App\Models\Guestinfo','user_id','id'); }}
Guestinfo model檔案:
class Guestinfo extends Model{ use HasFactory; // 设置Guest模型对应的数据表 protected $table = 'guestinfo'; // 关闭create_time和update_time字段自动管理 public $timestamps = false; // 设置与guestinfo的关联方法,方法名建议使用被关联表的名字 public function guest(){ // hasOne(被关联的名命空间,关联外键,关联的主键) return $this->belongsTo('App\Models\Guest','user_id','id'); }}
建立一個控制器將兩個model檔案連接起來:
php artisan make:controller Controllers 內容:
class Controllers extends Controller{ // public function getOne(){ // 通过关联方法获取guest表中username = admin记录在guestinfo对应的记录 // ->guestinfo 是Guest模型文件里面定义的guestinfo方法 $guestInfo = Guest::firstWhere('username','admin')->guestinfo; // 通过关联方法获取guestinfo中id=3 记录在guest表中的对应记录 $data = Guestinfo::find(3)->guest; dump($guestInfo); // 将模型转换成数组 dump($data->toArray()); }}
建立控制器的路由:
Route::get('relative/getOne',[Controllers::class,'getOne']); 存取路由:
結果為:
範例:
兩個資料表:guest
使用者表和article
文章表 其中
guest
表中的主鍵id
欄位對應著guestinfo
中的外鍵user_id
欄位 創建
article
model檔:php artisan make:model Article
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">class Article extends Model{
use HasFactory;
// 设置Guest模型对应的数据表
protected $table = 'article';
// 关闭create_time和update_time字段自动管理
public $timestamps = false;
public function guest(){
// 设置与guest的关联方法,与一对一的从表设置一样
return $this->belongsTo('App\Models\April\Guest','user_id','id');
}}</pre><div class="contentsignin">登入後複製</div></div>
在
model檔案中加入一個article
方法<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">class Guest extends Model{
use HasFactory;
// 设置Guest模型对应的数据表
protected $table = 'guest';
// 关闭create_time和update_time字段自动管理
public $timestamps = false;
// 设置与guestinfo的关联方法,方法名建议使用被关联表的名字
public function guestinfo(){
// hasOne(被关联的名命空间,关联外键,关联的主键)
return $this->hasOne('App\Models\Guestinfo','user_id','id');
}
// 设置与article的关联:hasmany 有很多
public function article(){
return $this->hasMany('App\Models\April\Article','user_id','id');
}}</pre><div class="contentsignin">登入後複製</div></div>
在
控制器檔案中測試一下: 實例1:查詢某一個使用者發表的所有文章:
// 查询某个用户发表的所有文章 $article = Guest::find(1)->article; // 返回为数据集,需要遍历 foreach ($article as $v){ dump($v->toArray()); }
#實例2:查詢某個使用者最新發表的文章
// 查询某个用户最新发表的一篇文章 // article()生成一个构造器,可以进行筛选 $article = Guest::find(1)->article()->orderby('created_at','desc')->first(); dump($article->toArray());
# 實例3:透過關聯查詢某篇文章的發表人的姓名
// 通过article和guest关联,再通过guest关联的guestinfo获取姓名 $name = Article::find(2)->guest->guestinfo; dump($name->name);
實例4:透過關聯查詢某篇文章的評論資訊 建立Comment評論模型:
#php artisan make:model Comment Comment 模型程式碼:
class Comment extends Model{ use HasFactory; // 设置Comment模型对应的数据表 protected $table = 'comment'; // 关闭create_time和update_time字段自动管理 public $timestamps = false; // 设置与article的关联方法,方法名建议使用被关联表的名字 public function article(){ return $this->belongsTo('App\Models\April\Article','article_id','id'); }}
在Article模型中新增方法comment:
public function comment(){ return $this->hasMany('App\Models\April\Comment','article_id','id'); }
controller控制器程式碼:
$info = Article::find(2)->comment; foreach ($info as $v){ dump($v->toArray()); }
【相關推薦:
以上是詳細解析Laravel Model模型關聯的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在dcatadmin(laravel-admin)中如何實現自定義點擊添加數據的表格功能在使用dcat...

Laravel郵件發送失敗時的退信代碼獲取方法在使用Laravel開發應用時,經常會遇到需要發送驗證碼的情況。而在實�...

Laravel框架中Redis連接的共享與select方法的影響在使用Laravel框架和Redis時,開發者可能會遇到一個問題:通過配置...

在Laravel多租戶擴展包stancl/tenancy中自定義租戶數據庫連接使用Laravel多租戶擴展包stancl/tenancy構建多租戶應用時,...

LaravelEloquent模型檢索:輕鬆獲取數據庫數據EloquentORM提供了簡潔易懂的方式來操作數據庫。本文將詳細介紹各種Eloquent模型檢索技巧,助您高效地從數據庫中獲取數據。 1.獲取所有記錄使用all()方法可以獲取數據庫表中的所有記錄:useApp\Models\Post;$posts=Post::all();這將返回一個集合(Collection)。您可以使用foreach循環或其他集合方法訪問數據:foreach($postsas$post){echo$post->

在Laravel6項目中如何檢查Redis連接的有效性是一個常見的問題,特別是在項目依賴於Redis進行業務處理時。以下是...

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

Laravel數據庫遷移過程中出現類重複定義問題在使用Laravel框架進行數據庫遷移時,開發者可能會遇到“類已使用�...
