我有2个表Orders
和Products
。在orders
表中有外键{{1}}。有时订单必须包含产品(不允许任何产品ID的订单)。在这种情况下,我的existsIn验证规则导致问题保存数据。
product_id
N.B。 - 请记住,我已经允许product_id在我的数据库中为空。
答案 0 :(得分:2)
编辑:根据ndm的注释existsIn如果您的列在数据库中可以为空,则检查null或exists in应该是existsIn的默认功能。如果它不起作用,也许你不小心传递某种值,或者你的列没有被列为可空。
您还应该能够覆盖exists in以允许此条件或其他条件。基本上你会指定一个存在或它是一个特定的值。在这种情况下为null。
从How to build rule exist in or equal to a number in cakephp 3?
修改的答案$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']
);