浏览代码

Merge pull request #9704 from cakephp/issue-9656

Fix options being passed down from validateUnique
Mark Story 9 年之前
父节点
当前提交
51e461f16a
共有 2 个文件被更改,包括 37 次插入1 次删除
  1. 1 1
      src/ORM/Table.php
  2. 36 0
      tests/TestCase/ORM/TableTest.php

+ 1 - 1
src/ORM/Table.php

@@ -2327,7 +2327,7 @@ class Table implements RepositoryInterface, EventListenerInterface, EventDispatc
                 return false;
             }
         }
-        $rule = new IsUnique($fields);
+        $rule = new IsUnique($fields, $options);
 
         return $rule($entity, ['repository' => $this]);
     }

+ 36 - 0
tests/TestCase/ORM/TableTest.php

@@ -5754,6 +5754,42 @@ class TableTest extends TestCase
     }
 
     /**
+     * Tests the validateUnique method with options
+     *
+     * @return void
+     */
+    public function testValidateUniqueMultipleNulls()
+    {
+        $entity = new Entity([
+            'id' => 9,
+            'site_id' => 1,
+            'author_id' => null,
+            'title' => 'Null title'
+        ]);
+
+        $table = TableRegistry::get('SiteArticles');
+        $table->save($entity);
+
+        $validator = new Validator;
+        $validator->add('site_id', 'unique', [
+            'rule' => [
+                'validateUnique',
+                [
+                    'allowMultipleNulls' => false,
+                    'scope' => ['author_id'],
+                ]
+            ],
+            'provider' => 'table',
+            'message' => 'Must be unique.',
+        ]);
+        $validator->provider('table', $table);
+
+        $data = ['site_id' => 1, 'author_id' => null, 'title' => 'Null dupe'];
+        $expected = ['site_id' => ['unique' => 'Must be unique.']];
+        $this->assertEquals($expected, $validator->errors($data));
+    }
+
+    /**
      * Tests that the callbacks receive the expected types of arguments.
      *
      * @return void