[英]Using pivot model data as a relationship to another model in Laravel 4's Eloquent
我有一個用於多對多關系的數據透視表,其中包括另一個模型的第三個索引參數。 我希望能夠使用Eloquent來訪問此模型。
在我的應用程序,我有一個User
誰可以有很多Subjects
,很多Semesters
。 當用戶具有Subject
,它也必須屬於給定的Semester
。 我有一個users
, subjects
和semesters
表,以及一個subject_user
表(具有user_id
, subject_id
和semester_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.