2017-08-14 12 views
0

私は2つのテーブルOrdersProductsを持っています。 ordersテーブルには、外部キーproduct_idがあります。場合によっては、注文に商品が含まれている必要はありません(商品IDのない注文は許可されます)。このシナリオでは、問題が原因でデータが保存される原因となる検証ルールが存在します。cakePHPがempty/NullフィールドのexistsIn()を検証していますか?

$rules->add($rules->existsIn(['product_id'], 'Products')); //Validation in the model of Orders. 

N.B. - 私は自分のDB内でproduct_idがnullであることを許可していることを覚えておいてください。

答えて

1

編集:ndmによってコメントごとに存在します。ヌルまたは既存のinをチェックするのは、データベースでnullが可能な場合はexistsInのデフォルト機能である必要があります。それがうまく動作しない場合は、誤って何らかの値を渡しているか、あなたの列がNULL値としてリストされていない可能性があります。

また、この条件やその他の条件を考慮して、存在を上書きすることもできます。基本的には存在を指定するか、それは特定の値です。この場合nullです。

回答ボックスの外に動作するはず `null`なのでを認識する(DBの列が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'] 
); 
+1

通常から変更します。 ** https://github.com/cakephp/cakephp/blob/3.4.12/src/ORM/Rule/ExistsIn.php#L113** – ndm

関連する問題