我有这个简单的动作:
/**
* 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关系中选择User并尝试保存异常时,会抛出:
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
4条答案
按热度按时间mbzjlibv1#
是的,我知道我迟到了,但是--这里有一个解决方案:使用Select-Field而不是BelongsTo并选择您的选项来构建键值对:
然后在句柄中,你应该在$fields中获取id:
7d7tgy0s2#
也许我迟到了,但是,对于像我这样想要使用BelongsTo可搜索字段的人,因为他们想要搜索的模型包含太多记录,无法将它们打包在正常的Select字段中,这里是我找到的解决方案:
使用以下代码在App\Nova\Fields中创建一个类:
然后像使用普通的BelongsTo字段一样使用它。只需记住在make上填写3个参数,例如:
记住,“关系”必须存在。
0ve6wy6x3#
检查命名空间。是否导入了正确的类?用户类必须是资源类
ojsjcaue4#
实际上,我通过模拟这个关系中使用的键值对来修复这个问题。
首先,我构建一个数组,ID列作为键,name列作为值。
然后使用Select nova字段显示它。