您好,登錄后才能下訂單哦!
這篇文章主要介紹“Laravel Model模型關聯怎么建立”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Laravel Model模型關聯怎么建立”文章能幫助大家解決問題。
數據庫表通常相互關聯。
例如,一篇博客文章可能有許多評論,或者一個訂單對應一個下單用戶。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
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'); }}
在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('App\Models\Guestinfo','user_id','id'); } // 設置與article的關聯:hasmany 有很多 public function article(){ return $this->hasMany('App\Models\April\Article','user_id','id'); }}
在Controllers
控制器文件中測試一下:
實例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模型關聯怎么建立”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。