Laravel Custom Pivot Model缺少字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel Custom Pivot Model缺少字段相关的知识,希望对你有一定的参考价值。

我正在尝试使用自定义Pivot模型,如:

class A extends Model{
    public function b()
    {
        return $this->belongsToMany(B::class)
            ->using(PivotAB::class);
    }

class PivotAB extends Pivot{}

通过关系访问PivotAB时,数据透视表中的附加字段将丢失(从artisan tinker输出):

>>>$q = A::all();
=> IlluminateDatabaseEloquentCollection {#1385
     all: [
       AppModelsA {#1386
         id: 1             
       },
     ],
   }
>>> $q[0]->b[0]->pivot;
=> AppModelsPivotAB {#1389
     a_id: 1,
     b_id: 1,
   }
>>> $q[0]->b[0]->pivot->custom_field;
=> null

但是当我直接查询枢轴模型时,该字段会被填充:

>>> PivotAB::all();    
=> IlluminateDatabaseEloquentCollection {#1382
     all: [
       AppModelsPivotAB{#281
         a_id: 1,
         b_id: 1,
         custom_field: "abc",
       },
     ],
   }

我错过了什么?我是否需要在某处声明透视字段?

答案

我必须将所有字段添加到与->withPivot('custom_field')的关系中,以便在通过A上的关系查询时填充它们。

不知怎的,我理解Laravel Docs要么必须使用->withPivot(...)->using(...),但实际上你需要包括两者。

另一答案

谢谢@Sloothword!我遭受了同样错误的假设。 'withPivot','使用'和'as'都可以很好地协同工作。我最终成功使用了以下内容。

public function rosters(){
    return $this->belongsToMany(Roster::class)
                ->withPivot('number','position')
                ->using(Membership::class)
                ->as("membership");
}

以上是关于Laravel Custom Pivot Model缺少字段的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5 更新所有 Pivot 条目

如何在 laravel 中检索用户时急切加载?

Laravel 多对多合并 Pivot?

Laravel Pivot - 通过相关模型获得相同的模型

Laravel 多对多关系:Pivot VS JSON

从 Laravel 中的 Mysql Pivot 表中获取列并返回 JSON 对象