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']
);