anrail / many-to-many
一个 Laravel Nova 字段。基于 armincms/many-to-many 分支
v0.4.1
2022-08-31 17:48 UTC
Requires
- php: >=7.1.0
This package is auto-updated.
Last update: 2024-09-29 06:14:56 UTC
README
A Laravel Nova 字段,用于实现多态和非多态的 ManyToMany 关系。
目录
特性
- 在创建和更新页面中附加多态和非多态的
ManyToMany关系 - 在附加关系时编辑交叉列
- 将一个资源多次附加到另一个资源
安装
composer require anrail/many-to-many
简单用法
use Armincms\Fields\BelongsToMany;
/**
* Get the fields displayed by the resource.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function fields(Request $request)
{
return [
BelongsToMany::make(__("Label"), 'relationName', RelatedResource::class)
->fields(function() {
return [
Text::make('Price')
->rules('required', 'numeric'),
];
})
->pivots(),
];
}
搜索
要搜索关系值而不是选择它,您可以在字段上使用 searchable 方法。
交叉表
要自定义附加资源时的交叉列,您可以使用字段的 pivots 方法。然后使用 fields 方法定义您自定义的交叉字段。现在,在附加资源时,将显示包含交叉字段的模态框。
use Armincms\Fields\BelongsToMany;
/**
* Get the fields displayed by the resource.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function fields(Request $request)
{
return [
BelongsToMany::make(__("Label"), 'relationName', RelatedResource::class)
->fields(function() {
return [
Text::make('Price')
->rules('required', 'numeric'),
];
})
->pivots(),
];
}
重复附件
您可以使用 duplicate 功能重复将资源附加到另一个资源。请参考以下示例
use Armincms\Fields\BelongsToMany;
/**
* Get the fields displayed by the resource.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function fields(Request $request)
{
return [
BelongsToMany::make(__("Label"), 'relationName', RelatedResource::class)
->fields(function() {
return [
Text::make('Price')
->rules('required', 'numeric'),
];
})
->duplicate(),
];
}
多态关系
对于多态关系的使用与非多态关系类似。请参考以下示例
use Armincms\Fields\MorphToMany;
/**
* Get the fields displayed by the resource.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function fields(Request $request)
{
return [
MorphToMany::make(__("Label"), 'relationName', RelatedResource::class)
->fields(function() {
return [
Text::make('Price')
->rules('required', 'numeric'),
];
})
->duplicate()
->pivots(),
];
}
或者
use Armincms\Fields\MorphedByMany;
/**
* Get the fields displayed by the resource.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function fields(Request $request)
{
return [
MorphedByMany::make(__("Label"), 'relationName', RelatedResource::class)
->fields(function() {
return [
Text::make('Price')
->rules('required', 'numeric'),
];
})
->duplicate()
->pivots(),
];
}
使用方式
您可以使用 fillUsing 来更改交叉列的值;然后您需要返回一个与您的交叉表匹配的关联数组。请注意;“fillUsing”方法适用于每个附件。请参考以下示例
->fillUsing(function($pivots) {
if(isset($pivots['options']) && is_array($pivots['options'])) {
$pivots['options'] = json_encode($pivots['options']);
}
return $pivots;
}),