Laravel 8 定義中間表模型

2021-07-19 11:35 更新

如果你想定義一個自定義模型來表示關(guān)聯(lián)關(guān)系中的中間表,可以在定義關(guān)聯(lián)時調(diào)用 using 方法。自定義多對多中間表模型都必須擴展自 Illuminate\Database\Eloquent\Relations\Pivot 類,自定義多對多(多態(tài))中間表模型必須繼承 Illuminate\Database\Eloquent\Relations\MorphPivot 類。例如,我們在寫 Role 模型的關(guān)聯(lián)時,使用自定義中間表模型 RoleUser

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Role extends Model
{
    /**
     * 擁有此角色的所有用戶
     */
    public function users()
    {
        return $this->belongsToMany('App\Models\User')->using('App\Models\RoleUser');
    }
} 

當(dāng)定義 RoleUser 模型時,我們要擴展 Pivot 類:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Relations\Pivot;

class RoleUser extends Pivot
{
    //
} 

你可以組合使用 usingwithPivot 從中間表來檢索列。例如,通過將列名傳遞給 withPivot 方法,就可以從 UserRole 中間表中檢索出 created_byupdated_by 兩列數(shù)據(jù):

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Role extends Model
{
    /**
     * 擁有此角色的用戶
     */
    public function users()
    {
        return $this->belongsToMany('App\Models\User')
                        ->using('App\Models\RoleUser')
                        ->withPivot([
                            'created_by',
                            'updated_by',
                        ]);
    }
} 

注意: Pivot 模型可能不使用 SoftDeletes 特性。 如果您需要軟刪除數(shù)據(jù)關(guān)聯(lián)記錄,請考慮將您的數(shù)據(jù)關(guān)聯(lián)模型轉(zhuǎn)換為實際的 Eloquent 模型。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號