laravel nova BelongsToMany - BelongsTo in pivot



在Laravel Nova中,我拥有许多关系(公司-枢轴-请求(。

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

但现在我遇到了一个特殊情况,其中我有一个从透视表到第三个表(状态(的额外BelongsTo关系。我试图在pivot字段中定义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 IlluminateDatabaseEloquentRelationsPivot::state()

relationshipstate((实际上存在于pivotModel上,并且还有一个Nova资源state类。

因此,数据透视字段似乎不支持此操作?或者有人知道是否有可能做到这一点吗?

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

class CompanyRequestFields
{
public function __invoke()
{
$states= AppState::all()->pluck('name', 'id');
return [
...
Select::make('State')->options($states),
];
}
}

AppRequest

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

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

这是为普通Laravel,如果可以的话,只需将sintaxis更改为Laravel-nova!

在Normal Laravel中,如果您想定义一个自定义模型来表示关系的中间表,则可以在定义关系时调用using方法。自定义多对多枢轴模型应扩展Illuminate\Database\Eloquent\Relations\pivot类,而自定义多态多对多轴模型应扩展Illuminate\Data\Eloquet\Relations\MorphPivot类别。在您的情况下,您可以定义一个自定义Companies_requests透视模型:

<?php
namespace App;
use IlluminateDatabaseEloquentRelationsPivot;
class Companies_requests extends Pivot
{
//
}

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

<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class Company extends Model
{
public function requests()
{
return $this->belongsToMany('AppRequest')->using('AppCompanies_requests');
}
}

namespace App;
use IlluminateDatabaseEloquentModel;
class Request extends Model
{
public function companies()
{
return $this->belongsToMany('AppCompany')->using('AppCompanies_requests');
}
}

现在,->pivot将成为您的新机型!

希望这就是你正在寻找的:(

最新更新