【问题标题】:Laravel Nova Actions BelongsTo field not workingLaravel Nova Actions BelongsTo 字段不起作用
【发布时间】: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

【问题讨论】:

    标签: laravel laravel-nova


    【解决方案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);
      }
      

      【讨论】:

        猜你喜欢
        • 2019-12-08
        • 1970-01-01
        • 2022-08-05
        • 2023-04-04
        • 2019-05-12
        • 1970-01-01
        • 1970-01-01
        • 2020-08-06
        • 2020-05-27
        相关资源
        最近更新 更多