Laravel Nova Actions BelongsTo 字段不起作用
Posted
技术标签:
【中文标题】Laravel Nova Actions BelongsTo 字段不起作用【英文标题】:Laravel Nova Actions BelongsTo field not working 【发布时间】:2021-03-19 19:48:11 【问题描述】:我有这个简单的动作:
/**
* Perform the action on the given models.
*
* @param \Laravel\Nova\Fields\ActionFields $fields
* @param \Illuminate\Support\Collection $models
* @return mixed
*/
public function handle(ActionFields $fields, Collection $models)
foreach ($models as $model)
$model->update([
'user_id' => $fields->user
]);
/**
* Get the fields available on the action.
*
* @return array
*/
public function fields()
return [
BelongsTo::make('User', 'user', User::class),
];
起初,它似乎很好,但是当我从 BelongsTo 关系中选择用户并尝试保存时抛出异常:
Argument 1 passed to Laravel\Nova\Fields\BelongsTo::getRelationForeignKeyName() must be an instance of Illuminate\Database\Eloquent\Relations\Relation, instance of Illuminate\Support\Fluent given, called in /Users/rd/Sites/bns-crm/vendor/laravel/nova/src/Fields/BelongsTo.php on line 212
【问题讨论】:
【参考方案1】:检查您的命名空间。您是否导入了正确的课程?用户类必须是资源类
public function fields()
return [
BelongsTo::make('User', 'user', User::class),
];
【讨论】:
是的,没关系。问题是您不能这样做,请在操作字段中使用关系。 嘿,您找到解决方案了吗? @RomkaLTU 你对此有什么参考吗?【参考方案2】:我实际上是通过模拟此关系中使用的键值对来解决此问题的。
首先我构建了一个数组,其中 ID 列作为键,名称列作为值。
$clients = Client::all()
->keyBy('id')
->map(fn($client): string => $client['name'])
->toArray();
然后我使用 Select nova 字段来显示它。
Select::make('Klant', 'client')
->searchable()
->options($clients)
->rules('required'),
【讨论】:
【参考方案3】:是的,我知道我迟到了,但是 - 这是一个解决方案: 使用 Select-Field 而不是 BelongsTo 并选择您的选项来构建键值对:
public function fields()
return [
Select::make('debitor')->options(\App\Models\Debitor::pluck('Name', 'id'))
];
然后你应该在句柄中获取 $fields 中的 id:
public function handle(ActionFields $fields, Collection $models)
Log::info($fields);
【讨论】:
以上是关于Laravel Nova Actions BelongsTo 字段不起作用的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在 Laravel 中为 Nova 资源显式定义策略?
markdown 与Laravel Nova合作的注意事项。
Laravel Nova 无法与 Laravel Spark 一起使用:位置 1213 的 JSON 中出现意外的令牌 P