在 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()),
Run Code Online (Sandbox Code Playgroud)
枢轴字段:
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),
];
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误:
Call to undefined method Illuminate\Database\Eloquent\Relations\Pivot::state()
Run Code Online (Sandbox Code Playgroud)
关系 state() 实际上存在于枢轴模型上,并且还有一个 Nova 资源状态类。
所以看起来 PivotFields 不支持这个?或者有谁知道是否有可能实现这一目标?
我无法使其与数据透视表中的关系一起使用,但您可以在没有关系定义的情况下实现它,如下所示。
class CompanyRequestFields
{
public function __invoke()
{
$states= \App\State::all()->pluck('name', 'id');
return [
...
Select::make('State')->options($states),
];
}
}
Run Code Online (Sandbox Code Playgroud)
\App\Request模型中
public function companies()
{
return $this->belongsToMany('App\Company')->withPivot('state');
}
Run Code Online (Sandbox Code Playgroud)
希望这个方法对你有帮助。
小智 -5
这是针对普通 Laravel 的,如果可以的话,只需将语法更改为 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
{
//
}
Run Code Online (Sandbox Code Playgroud)
并在您的公司模型和请求模型中引用它:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Company extends Model
{
public function requests()
{
return $this->belongsToMany('App\Request')->using('App\Companies_requests');
}
}
Run Code Online (Sandbox Code Playgroud)
。
namespace App;
use Illuminate\Database\Eloquent\Model;
class Request extends Model
{
public function companies()
{
return $this->belongsToMany('App\Company')->using('App\Companies_requests');
}
}
Run Code Online (Sandbox Code Playgroud)
现在,这->pivot将是您的新模型!
希望这就是您正在寻找的:)
| 归档时间: |
|
| 查看次数: |
5869 次 |
| 最近记录: |