在Laravel Nova的编辑表单视图中不包括relatableQuery?

时间:2019-03-17 00:04:58

标签: php laravel laravel-nova

我有2种资源:产品和库存(属于ToMany关系)

数据透视表(inventory_product)的额外字段为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字段时,由于验证,我不允许这样做。下拉菜单为空,因为上面的代码对它们进行了过滤。那么如何避免在编辑表单视图中使用上述代码?

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

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您是否有两个下拉菜单,其中一个是“产品”,应该用当前产品ID填充,另一个是“库存”,其中列出所有产品? 如果是这样,则应在产品下拉列表中返回完整的$ query,并为库存下拉列表返回更改后的$ query。

类似这样的东西:

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