cakePHP验证existsIn()for empty / Null字段,如何摆脱......?

时间:2017-08-14 12:17:34

标签: php cakephp cakephp-3.0 cakephp-3.x

我有2个表OrdersProducts。在orders表中有外键{​​{1}}。有时订单必须包含产品(不允许任何产品ID的订单)。在这种情况下,我的existsIn验证规则导致问题保存数据。

product_id
  

N.B。 - 请记住,我已经允许product_id在我的数据库中为空。

1 个答案:

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