【问题标题】:laravel nova BelongsToMany - BelongsTo in pivotlaravel nova BelongsToMany - BelongsTo in pivot
【发布时间】:2019-05-12 10:00:17
【问题描述】:

在 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 资源 State 类。

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

【问题讨论】:

  • 您好,您能找到任何解决方案吗?

标签: laravel-nova


【解决方案1】:

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

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');
}

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

【讨论】:

    【解决方案2】:

    这是 Normal Laravel,如果可以的话,只需将 sintaxis 更改为 laravel nova!

    在普通 Laravel 中,如果你想定义一个自定义模型来表示你的关系的中间表,你可以在定义关系时调用 using 方法。自定义多对多轴模型应该扩展 Illuminate\Database\Eloquent\Relations\Pivot 类,而自定义多态多对多轴模型应该扩展 Illuminate\Database\Eloquent\Relations\MorphPivot 类。在您的情况下,您可以定义一个自定义 Companies_requests 数据透视模型:

    <?php
    
    namespace App;
    
    use Illuminate\Database\Eloquent\Relations\Pivot;
    
    class Companies_requests extends Pivot
    {
        //
    }
    

    并在您的公司模型和请求模型中引用它:

    <?php
    
    namespace App;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Company extends Model
    {
        public function requests()
        {
            return $this->belongsToMany('App\Request')->using('App\Companies_requests');
        }
    }
    

    namespace App;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Request extends Model
    {
        public function companies()
        {
            return $this->belongsToMany('App\Company')->using('App\Companies_requests');
        }
    }
    

    现在,-&gt;pivot 将成为您的新型号!

    希望这就是您要搜索的内容:)

    【讨论】:

      猜你喜欢
      • 2019-12-30
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 2020-05-27
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      相关资源
      最近更新 更多