這篇文章主要介紹“Laravel Model模型關聯(lián)怎么建立”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Laravel Model模型關聯(lián)怎么建立”文章能幫助大家解決問題。
我們提供的服務有:成都網站建設、網站制作、微信公眾號開發(fā)、網站優(yōu)化、網站認證、磐安ssl等。為近千家企事業(yè)單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的磐安網站制作公司
數(shù)據庫表通常相互關聯(lián)。
例如,一篇博客文章可能有許多評論,或者一個訂單對應一個下單用戶。Eloquent 讓這些關聯(lián)的管理和使用變得簡單,并支持多種類型的關聯(lián):常見的為前三種,在此我們也只講解前三種關聯(lián)
一對一
一對多
多對多
遠程一對多
遠程一對一
一對一(多態(tài)關聯(lián))
一對多(多態(tài)關聯(lián))
多對多
一對一
示例:
兩個數(shù)據表:guest
用戶表和guestinfo
用戶信息
其中guest
表中的主鍵id
字段對應著guestinfo
中的外鍵user_id
字段
首先創(chuàng)建兩個model文件:php artisan make:model Guest
php artisan make:model Guestinfo
Guest model文件:
class Guest extends Model{ use HasFactory; // 設置Guest模型對應的數(shù)據表 protected $table = 'guest'; // 關閉create_time和update_time字段自動管理 public $timestamps = false; // 設置與guestinfo的關聯(lián)方法,方法名建議使用被關聯(lián)表的名字 public function guestinfo(){ // hasOne(被關聯(lián)的名命空間,關聯(lián)外鍵,關聯(lián)的主鍵) return $this->hasOne('App\Models\Guestinfo','user_id','id'); }}
Guestinfo model文件:
class Guestinfo extends Model{ use HasFactory; // 設置Guest模型對應的數(shù)據表 protected $table = 'guestinfo'; // 關閉create_time和update_time字段自動管理 public $timestamps = false; // 設置與guestinfo的關聯(lián)方法,方法名建議使用被關聯(lián)表的名字 public function guest(){ // hasOne(被關聯(lián)的名命空間,關聯(lián)外鍵,關聯(lián)的主鍵) return $this->belongsTo('App\Models\Guest','user_id','id'); }}
創(chuàng)建一個控制器將兩個model文件連接起來:php artisan make:controller Controllers
內容:
class Controllers extends Controller{ // public function getOne(){ // 通過關聯(lián)方法獲取guest表中username = admin記錄在guestinfo對應的記錄 // ->guestinfo 是Guest模型文件里面定義的guestinfo方法 $guestInfo = Guest::firstWhere('username','admin')->guestinfo; // 通過關聯(lián)方法獲取guestinfo中id=3 記錄在guest表中的對應記錄 $data = Guestinfo::find(3)->guest; dump($guestInfo); // 將模型轉換成數(shù)組 dump($data->toArray()); }}
創(chuàng)建控制器的路由:Route::get('relative/getOne',[Controllers::class,'getOne']);
一對多
示例:
兩個數(shù)據表:guest
用戶表和article
文章表
其中guest
表中的主鍵id
字段對應著guestinfo
中的外鍵user_id
字段
創(chuàng)建article
model文件:php artisan make:model Article
class Article extends Model{ use HasFactory; // 設置Guest模型對應的數(shù)據表 protected $table = 'article'; // 關閉create_time和update_time字段自動管理 public $timestamps = false; public function guest(){ // 設置與guest的關聯(lián)方法,與一對一的從表設置一樣 return $this->belongsTo('App\Models\April\Guest','user_id','id'); }}
在Guest
model文件中添加一個article
方法
class Guest extends Model{ use HasFactory; // 設置Guest模型對應的數(shù)據表 protected $table = 'guest'; // 關閉create_time和update_time字段自動管理 public $timestamps = false; // 設置與guestinfo的關聯(lián)方法,方法名建議使用被關聯(lián)表的名字 public function guestinfo(){ // hasOne(被關聯(lián)的名命空間,關聯(lián)外鍵,關聯(lián)的主鍵) return $this->hasOne('App\Models\Guestinfo','user_id','id'); } // 設置與article的關聯(lián):hasmany 有很多 public function article(){ return $this->hasMany('App\Models\April\Article','user_id','id'); }}
在Controllers
控制器文件中測試一下:
實例1:查詢某一個用戶發(fā)表的所有文章:
// 查詢某個用戶發(fā)表的所有文章 $article = Guest::find(1)->article; // 返回為數(shù)據集,需要遍歷 foreach ($article as $v){ dump($v->toArray()); }
實例2:查詢某個用戶最新發(fā)表的一篇文章
// 查詢某個用戶最新發(fā)表的一篇文章 // article()生成一個構造器,可以進行篩選 $article = Guest::find(1)->article()->orderby('created_at','desc')->first(); dump($article->toArray());
實例3:通過關聯(lián)查詢某篇文章的發(fā)表人的姓名
// 通過article和guest關聯(lián),再通過guest關聯(lián)的guestinfo獲取姓名 $name = Article::find(2)->guest->guestinfo; dump($name->name);
實例4:通過關聯(lián)查詢某篇文章的評論信息
創(chuàng)建Comment評論模型:php artisan make:model Comment
Comment 模型代碼:
class Comment extends Model{ use HasFactory; // 設置Comment模型對應的數(shù)據表 protected $table = 'comment'; // 關閉create_time和update_time字段自動管理 public $timestamps = false; // 設置與article的關聯(lián)方法,方法名建議使用被關聯(lián)表的名字 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模型關聯(lián)怎么建立”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識,可以關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。