有一种方法可以通过创建一个扩展类来做到这一点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 文档参考:使用数据透视表有一篇关于定义自定义数据透视模型的短文。