think-validate
think-validate copied to clipboard
unique复杂验证是不是不对
https://github.com/top-think/think-validate/blob/f7dd85675270e9f8c0b04a13362133067629f53c/src/Validate.php#L1484
图片展示的是查询UserAddress用户的地址是否存在,我这里是用unique实现的,
规则'address_id' => 'require|exist:'.UserAddress::class.',id=address_id&uid=uid'
我现在这样写的查询是
SELECT `id` FROM `eb_user_address` WHERE ( `id` = address_id AND `uid` = 14 ) LIMIT 1
其实期望得到应该是 ```sql
SELECT id FROM eb_user_address WHERE ( id = 2 AND uid = 14 ) LIMIT 1
所以
```php
// 支持复杂验证
parse_str($key, $array);
foreach ($array as $k => $val) {
$map[] = [$k, '=', $data[$k] ?? $val];
}
// 这里的$data[$k] 是不是应该 $data[$val] 更合适一些
我现在的代码需要这样实现
class OrderValidate extends Validate
{
protected $failException = true;
protected function exist($value, $rule, $data, $field): bool
{
$address = [
'id' => $data['address_id'],
'uid' => $data['uid']
];
return !$this->unique($value, $rule, $address, $field);
}
protected $rule = [
'address_id' => 'require|exist:'.UserAddress::class.',id=id&uid=uid',
];
// ...