art*_*Sir 4 php validation cakephp cakephp-3.0
我有一张产品尺寸表
Product Details
id product_id size
1 1 m
1 1 l
2 2 l
Run Code Online (Sandbox Code Playgroud)
如果我尝试向尺寸为m的产品1添加另一个细节,则应返回false,但对于产品2尺寸m应该通过
在我的产品详细信息表中,这里有验证器
//Product Detail Table
public function validationDefault(Validator $validator){
$validator
->add('size', 'unique', ['rule' => 'validateUnique', 'provider' => 'table'])
Run Code Online (Sandbox Code Playgroud)
不确定如何为列添加条件
ndm*_*ndm 14
这就是scope选项的用途,它允许您向唯一性约束添加其他字段.
唯一验证可以限定为另一列的值:
Run Code Online (Sandbox Code Playgroud)$validator->add('email', [ 'unique' => [ 'rule' => ['validateUnique', ['scope' => 'site_id']], 'provider' => 'table' ] ]);在上面的示例中,电子邮件唯一性将仅限于具有相同site_id的行.仅当要验证的数据中存在作用域字段时,才会使用作用域.
API>\Cake\ORM\Table :: validateUnique()
但是,这至少应该是一个应用程序规则,因为它容易出现竞争条件,因此需要在事务中进行检查,默认情况下只对应用程序规则进行检查.
您可以使用内置IsUnique规则,您只需将多个列名称传递给.
use Cake\ORM\RulesChecker;
// ...
public function buildRules(RulesChecker $rules)
{
$rules->add($rules->isUnique(['product_id', 'size']));
return $rules;
}
Run Code Online (Sandbox Code Playgroud)
也可以看看
| 归档时间: |
|
| 查看次数: |
5517 次 |
| 最近记录: |