詳細解析Laravel Model模型關聯

本篇文章給大家帶來了關于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('AppModelsGuestinfo','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('AppModelsGuest','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’]);
訪問路由:
結果為:
詳細解析Laravel Model模型關聯

一對多

示例:
兩個數據表:guest 用戶表和article文章表
其中guest表中的主鍵id字段對應著guestinfo中的外鍵user_id字段
創建articlemodel文件:
php artisan make:model Article

class Article extends Model{     use HasFactory;     // 設置Guest模型對應的數據表     protected $table = 'article'; 	// 關閉create_time和update_time字段自動管理         public $timestamps = false;     public function guest(){     // 設置與guest的關聯方法,與一對一的從表設置一樣         return $this->belongsTo('AppModelsAprilGuest','user_id','id');     }}

在Guest model文件中添加一個article 方法

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('AppModelsGuestinfo','user_id','id');     }     // 設置與article的關聯:hasmany 有很多      public function article(){         return $this->hasMany('AppModelsAprilArticle','user_id','id');     }}

在Controllers 控制器文件中測試一下:
實例1:查詢某一個用戶發表的所有文章:

 		// 查詢某個用戶發表的所有文章         $article = Guest::find(1)->article;         // 返回為數據集,需要遍歷         foreach ($article as $v){             dump($v->toArray());         }

詳細解析Laravel Model模型關聯

實例2:查詢某個用戶最新發表的一篇文章

		// 查詢某個用戶最新發表的一篇文章         // article()生成一個構造器,可以進行篩選         $article = Guest::find(1)->article()->orderby('created_at','desc')->first();         dump($article->toArray());

詳細解析Laravel Model模型關聯
實例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('AppModelsAprilArticle','article_id','id');     }}

在Article模型中添加方法comment:

public function comment(){         return $this->hasMany('AppModelsAprilComment','article_id','id');     }

controller控制器代碼:

$info = Article::find(2)->comment;         foreach ($info as $v){             dump($v->toArray());         }

詳細解析Laravel Model模型關聯

【相關推薦:laravel

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享