首頁  >  文章  >  php框架  >  詳細解析Laravel Model模型關聯

詳細解析Laravel Model模型關聯

WBOY
WBOY轉載
2022-05-26 11:47:122896瀏覽

本篇文章為大家帶來了關於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']);
存取路由: 結果為:


詳細解析Laravel Model模型關聯

一對多

範例:

兩個資料表: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());
        }

詳細解析Laravel Model模型關聯#實例2:查詢某個使用者最新發表的文章

		// 查询某个用户最新发表的一篇文章
        // article()生成一个构造器,可以进行筛选
        $article = Guest::find(1)->article()->orderby('created_at','desc')->first();
        dump($article->toArray());

# 實例3:透過關聯查詢某篇文章的發表人的姓名詳細解析Laravel Model模型關聯

		//  通过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模型關聯【相關推薦:

laravel影片教學

以上是詳細解析Laravel Model模型關聯的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除