laravel-nova - 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 不支持这个?或者有谁知道它是否有可能做到这一点?
解决方案
我无法使其与数据透视表中的关系一起使用,但您可以在没有如下关系定义的情况下实现它。
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');
}
希望这种方法对您有所帮助。
推荐阅读
- angular - Angular 2+ 中保存 Jasmine 数据固定装置的合适位置在哪里?
- prometheus - Prometheus Query 在最后一天获得不同的值
- go - Golang:如何在 Go 中成功创建新的 Stripe PaymentIntent?示例 go 代码有一个名为“paymentintent”的未定义变量。
- javascript - 如何使用 NodeJS 跟踪多部分/表单数据 POST 请求的上传进度?
- ios - Firebase 推送通知不起作用,我错过了什么吗?
- netsuite - 如何在没有任何模块的情况下将 Netsuit 与 Shipstation 集成?
- java - HttpURLConnection 不适用于多语言网站
- c# - 如何在关闭进程之前等待任务结束?
- c - 将变量数加 1
- firebase - 如何在 Flutter Web 应用程序中将 Firebase.dart 与 Firebase Emulators FireStore db 一起使用?