簡體   English   中英

使用樞軸模型數據作為與Laravel 4的Eloquent中另一個模型的關系

[英]Using pivot model data as a relationship to another model in Laravel 4's Eloquent

我有一個用於多對多關系的數據透視表,其中包括另一個模型的第三個索引參數。 我希望能夠使用Eloquent來訪問此模型。

在我的應用程序,我有一個User誰可以有很多Subjects ,很多Semesters 當用戶具有Subject ,它也必須屬於給定的Semester 我有一個userssubjectssemesters表,以及一個subject_user表(具有user_idsubject_idsemester_id )。

檢索User的主題時,我還希望能夠通過數據透視表獲取Subject已連接到的Session

class User
{
    public function subjects()
    {
        $this->belongsToMany('Subject')->withPivot('session_id');
    }
}

我想做的如下,並為我提供了Session模型。

$user->subjects()->pivot->semester;

這樣的事情是否可能,或者這需要擴展到Eloquent?

有一種方法可以通過創建擴展Illuminate\\Database\\Eloquent\\Relations\\Pivot 盡管此方法還需要向擁有此數據透視表的兩個模型添加一些代碼,以便它們在需要時使用新的數據透視表。

該鏈接討論了自定義數據透視模型的實現: https : //github.com/laravel/framework/issues/2093#issuecomment-39154456

use Illuminate\Database\Eloquent\Relations\Pivot;

class SubjectUser extends Pivot {
   // add your relationships back to User and Subject
    public function session() {
         // your relation to session here
    }
}

class Subject extends Eloquent {
    ...
    public function newPivot(Eloquent $parent, array $attributes, $table, $exists) {
        if ($parent instanceof User) {
            return new SubjectUser($parent, $attributes, $table, $exists);
        }
        return parent::newPivot($parent, $attributes, $table, $exists);
    }
}

class User extends Eloquent {
    ...
    public function newPivot(Eloquent $parent, array $attributes, $table, $exists) {
        if ($parent instanceof Subject) {
            return new SubjectUser($parent, $attributes, $table, $exists);
        }
        return parent::newPivot($parent, $attributes, $table, $exists);
    }
}

現在,您將可以訪問已定義的樞軸關系。

$user->subjects->first()->pivot->session->...

注意:您將不會直接與此類互動。 當這兩個模型之間需要樞軸時,將創建它而不是默認的樞軸。

Laravel Doc參考: 使用數據透視表有一小段關於定義自定義數據透視模型的文章。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM