您好,登錄后才能下訂單哦!
這篇文章主要介紹“Laravel Model模型關(guān)聯(lián)怎么建立”的相關(guān)知識(shí),小編通過實(shí)際案例向大家展示操作過程,操作方法簡單快捷,實(shí)用性強(qiáng),希望這篇“Laravel Model模型關(guān)聯(lián)怎么建立”文章能幫助大家解決問題。
數(shù)據(jù)庫表通常相互關(guān)聯(lián)。
例如,一篇博客文章可能有許多評(píng)論,或者一個(gè)訂單對(duì)應(yīng)一個(gè)下單用戶。Eloquent 讓這些關(guān)聯(lián)的管理和使用變得簡單,并支持多種類型的關(guān)聯(lián):常見的為前三種,在此我們也只講解前三種關(guān)聯(lián)
一對(duì)一
一對(duì)多
多對(duì)多
遠(yuǎn)程一對(duì)多
遠(yuǎn)程一對(duì)一
一對(duì)一(多態(tài)關(guān)聯(lián))
一對(duì)多(多態(tài)關(guān)聯(lián))
多對(duì)多
一對(duì)一
示例:
兩個(gè)數(shù)據(jù)表:guest
用戶表和guestinfo
用戶信息
其中guest
表中的主鍵id
字段對(duì)應(yīng)著guestinfo
中的外鍵user_id
字段
首先創(chuàng)建兩個(gè)model文件:php artisan make:model Guest
php artisan make:model Guestinfo
Guest model文件:
class Guest extends Model{ use HasFactory; // 設(shè)置Guest模型對(duì)應(yīng)的數(shù)據(jù)表 protected $table = 'guest'; // 關(guān)閉create_time和update_time字段自動(dòng)管理 public $timestamps = false; // 設(shè)置與guestinfo的關(guān)聯(lián)方法,方法名建議使用被關(guān)聯(lián)表的名字 public function guestinfo(){ // hasOne(被關(guān)聯(lián)的名命空間,關(guān)聯(lián)外鍵,關(guān)聯(lián)的主鍵) return $this->hasOne('App\Models\Guestinfo','user_id','id'); }}
Guestinfo model文件:
class Guestinfo extends Model{ use HasFactory; // 設(shè)置Guest模型對(duì)應(yīng)的數(shù)據(jù)表 protected $table = 'guestinfo'; // 關(guān)閉create_time和update_time字段自動(dòng)管理 public $timestamps = false; // 設(shè)置與guestinfo的關(guān)聯(lián)方法,方法名建議使用被關(guān)聯(lián)表的名字 public function guest(){ // hasOne(被關(guān)聯(lián)的名命空間,關(guān)聯(lián)外鍵,關(guān)聯(lián)的主鍵) return $this->belongsTo('App\Models\Guest','user_id','id'); }}
創(chuàng)建一個(gè)控制器將兩個(gè)model文件連接起來:php artisan make:controller Controllers
內(nèi)容:
class Controllers extends Controller{ // public function getOne(){ // 通過關(guān)聯(lián)方法獲取guest表中username = admin記錄在guestinfo對(duì)應(yīng)的記錄 // ->guestinfo 是Guest模型文件里面定義的guestinfo方法 $guestInfo = Guest::firstWhere('username','admin')->guestinfo; // 通過關(guān)聯(lián)方法獲取guestinfo中id=3 記錄在guest表中的對(duì)應(yīng)記錄 $data = Guestinfo::find(3)->guest; dump($guestInfo); // 將模型轉(zhuǎn)換成數(shù)組 dump($data->toArray()); }}
創(chuàng)建控制器的路由:Route::get('relative/getOne',[Controllers::class,'getOne']);
一對(duì)多
示例:
兩個(gè)數(shù)據(jù)表:guest
用戶表和article
文章表
其中guest
表中的主鍵id
字段對(duì)應(yīng)著guestinfo
中的外鍵user_id
字段
創(chuàng)建article
model文件:php artisan make:model Article
class Article extends Model{ use HasFactory; // 設(shè)置Guest模型對(duì)應(yīng)的數(shù)據(jù)表 protected $table = 'article'; // 關(guān)閉create_time和update_time字段自動(dòng)管理 public $timestamps = false; public function guest(){ // 設(shè)置與guest的關(guān)聯(lián)方法,與一對(duì)一的從表設(shè)置一樣 return $this->belongsTo('App\Models\April\Guest','user_id','id'); }}
在Guest
model文件中添加一個(gè)article
方法
class Guest extends Model{ use HasFactory; // 設(shè)置Guest模型對(duì)應(yīng)的數(shù)據(jù)表 protected $table = 'guest'; // 關(guān)閉create_time和update_time字段自動(dòng)管理 public $timestamps = false; // 設(shè)置與guestinfo的關(guān)聯(lián)方法,方法名建議使用被關(guān)聯(lián)表的名字 public function guestinfo(){ // hasOne(被關(guān)聯(lián)的名命空間,關(guān)聯(lián)外鍵,關(guān)聯(lián)的主鍵) return $this->hasOne('App\Models\Guestinfo','user_id','id'); } // 設(shè)置與article的關(guān)聯(lián):hasmany 有很多 public function article(){ return $this->hasMany('App\Models\April\Article','user_id','id'); }}
在Controllers
控制器文件中測(cè)試一下:
實(shí)例1:查詢某一個(gè)用戶發(fā)表的所有文章:
// 查詢某個(gè)用戶發(fā)表的所有文章 $article = Guest::find(1)->article; // 返回為數(shù)據(jù)集,需要遍歷 foreach ($article as $v){ dump($v->toArray()); }
實(shí)例2:查詢某個(gè)用戶最新發(fā)表的一篇文章
// 查詢某個(gè)用戶最新發(fā)表的一篇文章 // article()生成一個(gè)構(gòu)造器,可以進(jìn)行篩選 $article = Guest::find(1)->article()->orderby('created_at','desc')->first(); dump($article->toArray());
實(shí)例3:通過關(guān)聯(lián)查詢某篇文章的發(fā)表人的姓名
// 通過article和guest關(guān)聯(lián),再通過guest關(guān)聯(lián)的guestinfo獲取姓名 $name = Article::find(2)->guest->guestinfo; dump($name->name);
實(shí)例4:通過關(guān)聯(lián)查詢某篇文章的評(píng)論信息
創(chuàng)建Comment評(píng)論模型:php artisan make:model Comment
Comment 模型代碼:
class Comment extends Model{ use HasFactory; // 設(shè)置Comment模型對(duì)應(yīng)的數(shù)據(jù)表 protected $table = 'comment'; // 關(guān)閉create_time和update_time字段自動(dòng)管理 public $timestamps = false; // 設(shè)置與article的關(guān)聯(lián)方法,方法名建議使用被關(guā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()); }
關(guān)于“Laravel Model模型關(guān)聯(lián)怎么建立”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。