在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不支持此功能?还是有人知道是否有可能实现这一目标?
答案 0 :(得分:0)
我无法使其与数据透视表中的关系一起使用,但是无需使用如下所示的关系定义就可以实现它。
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');
}
希望这种方法对您有帮助。
答案 1 :(得分:-1)
这是针对普通Laravel 的,如果可以,只需将sintaxis更改为laravel nova!
在Normal 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');
}
}
现在,->pivot
将成为您的新型号!
希望这就是您要搜索的内容:)