【问题标题】:Using pivot model data as a relationship to another model in Laravel 4's Eloquent在 Laravel 4 的 Eloquent 中使用数据透视模型数据作为与另一个模型的关系
【发布时间】:2013-06-26 09:19:12
【问题描述】:

我有一个多对多关系的数据透视表,其中包括另一个模型的第三个索引参数。我希望能够使用 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?

【问题讨论】:

  • 曾经想出解决方案吗?有类似的问题。
  • 我的解决方案是使用定义了自己的关系的 UserSubject 模型。我确实在 Eloquent 中对此提出了功能请求,但被拒绝了。我认为连接模型是一个很好的解决方案。

标签: php laravel laravel-4 eloquent


【解决方案1】:

有一种方法可以通过创建一个扩展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->...

注意:您不会直接与此类进行交互。当需要在这 2 个模型之间进行枢轴时,会创建它而不是默认的枢轴。

Laravel 文档参考:Working with Pivot Tables 有一篇关于定义自定义数据透视模型的短文。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-25
    • 2018-06-28
    • 2021-09-05
    • 2018-11-12
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 2014-04-02
    相关资源
    最近更新 更多