获取同一节点内另一个输入的值

时间:2018-07-14 18:26:58

标签: laravel

请考虑以下情形:

这是需要验证的请求正文。

{
    "cart": [
        {
            "product_id": 1, 
            "qty": 2, 
            "schedule": "2018-07-15"
        }, 
        {
            "product_id": 2, 
            "qty": 5, 
            "schedule": "2018-07-15"
        }
    ]
}

以下是验证规则。

public function rules()
{
    return [
        'cart' => "required|array",
        'cart.*.schedule' => "required|date",
        'cart.*.qty' => "required|integer|max:5",
        'cart.*.product_id' => "required|exists:product,id",
    ];
}

到目前为止,太好了。我只需要为cart.*.product_id添加另一条规则来检查相应的cart.*.schedule中是否有该产品,所以我创建了一个名为OnSchedule的自定义规则。

class OnSchedule implements Rule
{

    public function passes($attribute, $value)
    {
        // $attribute will be like cart.0.product_id
        // I need to know the value of cart.0.schedule
    }

    public function message()
    {
        return ":attribute is not available for this schedule";
    }

}

现在是问题所在,我该如何检索位于schedule相同节点内的product_id的当前值。顺便说一句,这是更新的rules()函数。

public function rules()
{
    return [
        'cart' => "required|array",
        'cart.*.schedule' => "required|date",
        'cart.*.qty' => "required|integer|max:5",
        'cart.*.product_id' => [
            "required", "exists:product,id", new OnSchedule
        ],
    ];
}

0 个答案:

没有答案