cakePHP验证existsIn()的空/空字段,如何摆脱。。。?
我有两个表cakePHP验证existsIn()的空/空字段,如何摆脱。。。?,php,cakephp,cakephp-3.0,cakephp-3.x,Php,Cakephp,Cakephp 3.0,Cakephp 3.x,我有两个表订单和产品。在订单中表具有外键产品id。有时,订单不必包含产品(允许订单没有任何产品id)。在这个场景中,我的existIn验证规则导致了保存数据的问题 $rules->add($rules->existsIn(['product_id'], 'Products')); //Validation in the model of Orders. 注意-请记住,我已经允许产品id在我的数据库中为空 编辑:根据ndm existsIn的注释如果您的列在数据库中可为null,则
订单
和产品
。在订单中
表具有外键产品id
。有时,订单不必包含产品(允许订单没有任何产品id)。在这个场景中,我的existIn验证规则导致了保存数据的问题
$rules->add($rules->existsIn(['product_id'], 'Products')); //Validation in the model of Orders.
注意-请记住,我已经允许产品id在我的数据库中为空
编辑:根据ndm existsIn的注释如果您的列在数据库中可为null,则existsIn的默认功能应该是检查null或existin。如果它不起作用,可能是您无意中传递了某种值,或者您的列未列为可空 您还应该能够覆盖中存在的,以允许此条件或其他条件。基本上,您将指定一个exists in或它是一个特定的值。在本例中为空 答案修改自
通常,识别
null
应该是现成的(假设数据库中的列可以为null)。
$rules->add(
function ($entity, $options) {
$rule = new ExistsIn(['product_id'], 'Products');
return $entity->product_id === NULL || $rule($entity, $options);
},
['errorField' => 'product_id', 'message' => 'Product ID specified but does not exist']
);