首页 > 解决方案 > laravel nova BelongsToMany - BelongsTo in pivot

问题描述

在 Laravel Nova 中,我有 BelongsToMany 关系(公司 - 支点 - 请求)。

在数据透视表中,我有一些额外的列,我可以使用数据透视字段 ( https://nova.laravel.com/docs/1.0/resources/relationships.html#belongstomany ) 访问它们,效果很好。

但是现在我有一个特殊情况,我有一个从数据透视表到第三个表(状态)的附加 BelongsTo 关系。我试图在枢轴字段中定义一个 BelongsTo 字段,但这不起作用。

BelongsToMany::make('Companies', 'companies', Company::class)->fields(new CompanyRequestFields()),

枢轴字段:

class CompanyRequestFields
{
    /**
     * Get the pivot fields for the relationship.
     *
     * @return array
     */
    public function __invoke()
    {
        return [
            Number::make('preis'),
            Text::make('bezahlt'),
             BelongsTo::make('State', 'state', States::class),
        ];
    }
}

我得到的错误:

Call to undefined method Illuminate\Database\Eloquent\Relations\Pivot::state()

关系 state() 实际上存在于枢轴模型上,并且还有一个 Nova 资源状态类。

所以看起来 PivotFields 不支持这个?或者有谁知道它是否有可能做到这一点?

标签: laravel-nova

解决方案


我无法使其与数据透视表中的关系一起使用,但您可以在没有如下关系定义的情况下实现它。

class CompanyRequestFields
{
    public function __invoke()
    {
        $states= \App\State::all()->pluck('name', 'id');

        return [
            ...
            Select::make('State')->options($states),
        ];
    }
}

\App\Request模型中

public function companies()
{
    return $this->belongsToMany('App\Company')->withPivot('state');
}

希望这种方法对您有所帮助。


推荐阅读