我有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
,但是没有用:(
谢谢您的帮助!
答案 0 :(得分:0)
您是否有两个下拉菜单,其中一个是“产品”,应该用当前产品ID填充,另一个是“库存”,其中列出所有产品? 如果是这样,则应在产品下拉列表中返回完整的$ query,并为库存下拉列表返回更改后的$ query。
类似这样的东西:
$fieldResourceType = $request->route()->parameter('field');
return $fieldResourceType == 'inventory' ? $query->whereNotIn('id', $attachedItems) : $query;