2017-08-14 44 views
0

我有2個表OrdersProducts。在orders表中有外鍵product_id。有時,訂單不一定包含產品(沒有任何產品ID的訂單是允許的)。在這種情況下,我存在導致問題保存數據的驗證規則。cakePHP驗證existsIn()爲空/空字段,如何擺脫...?

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

N.B. - 請記住,我已允許product_id在我的數據庫中爲空。

回答

1

編輯:根據ndm exists的評論existsIn檢查null或存在應該是existsIn的默認功能,如果您的列在數據庫中可爲空。如果它不起作用,或許你意外地傳遞了某種價值,或者你的專欄沒有被列爲可空。

你也應該能夠覆蓋存在於允許這個或其他條件。基本上你會指定一個存在或它是一個特定的值。在這種情況下,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

通常修改,承認'null'應開箱的(因爲在DB列可以爲空)。 ** HTTPS://github.com/cakephp/cakephp/blob/3.4.12/src/ORM/Rule/ExistsIn.php#L113** – ndm