【问题标题】:Excluding relatableQuery in edit form view of Laravel Nova?在 Laravel Nova 的编辑表单视图中排除 relatableQuery?
【发布时间】:2019-03-17 00:04:58
【问题描述】:

我有 2 个资源:产品和库存(BelongsToMany 关系)

数据透视表 (@​​987654321@) 有一个额外字段是 quantity(在库存中存储产品的数量)。

使用 BelongToMany 字段时,它可以正常工作,但下拉列表仍然显示所有可能的选项,即使是已经附加的选项。因此,我使用 relatableQuery 方法从查询中排除附加的。

public static function relatableQuery(NovaRequest $request, $query)
    {
        // Get the current resource.
        $resourceId = $request->route()->parameter('resourceId');

        // Get the array of product ids that already attached.
        $attachedItems = app(self::$model)->whereHas('inventories', function ($query) use ($resourceId) {
            $query->where('inventory_id', $resourceId);
        })->get()->pluck('id');

        return $query->whereNotIn('id', $attachedItems);
    }

但问题是当我去编辑表单调整quantity 字段时,由于验证,它不允许我这样做。下拉菜单是空的,因为上面的代码过滤了它们。那么如何在编辑表单视图中避免上述代码呢?

我已经尝试从NovaRequest 获取parameter,但没有成功:(

感谢您的帮助!!!

【问题讨论】:

    标签: php laravel laravel-nova


    【解决方案1】:

    您是否有两个下拉列表,一个用于 Product,应填写当前产品 ID,另一个用于 Inventory,列出所有产品? 如果是这样,那么您应该在产品下拉列表中返回完整的 $query,并为库存下拉列表返回更改后的 $query。

    类似这样的:

    $fieldResourceType = $request->route()->parameter('field');
    return $fieldResourceType == 'inventory' ? $query->whereNotIn('id', $attachedItems) : $query;
    

    【讨论】:

      猜你喜欢
      • 2019-03-01
      • 2019-11-14
      • 2013-05-02
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 2019-08-20
      • 2016-02-02
      • 1970-01-01
      相关资源
      最近更新 更多