diff --git a/lib/Cake/Model/Datasource/DboSource.php b/lib/Cake/Model/Datasource/DboSource.php index 48282118d72..f9b1a109c52 100644 --- a/lib/Cake/Model/Datasource/DboSource.php +++ b/lib/Cake/Model/Datasource/DboSource.php @@ -2588,7 +2588,7 @@ protected function _parseKey($model, $key, $value) { } if (!preg_match($operatorMatch, trim($operator))) { - $operator .= ' ='; + $operator .= is_array($value) ? ' IN' : ' ='; } $operator = trim($operator); diff --git a/lib/Cake/Test/Case/Model/Datasource/Database/MysqlTest.php b/lib/Cake/Test/Case/Model/Datasource/Database/MysqlTest.php index 3ac46ef5abb..7b60b649d88 100644 --- a/lib/Cake/Test/Case/Model/Datasource/Database/MysqlTest.php +++ b/lib/Cake/Test/Case/Model/Datasource/Database/MysqlTest.php @@ -2446,6 +2446,11 @@ public function testArrayConditionsParsing() { $expected = " WHERE `id` IN (2, 5, 6, 9, 12, 45, 78, 43, 76)"; $this->assertEquals($expected, $result); + $conditions = array('`Correction`.`source` collate utf8_bin' => array('kiwi', 'pear')); + $result = $this->Dbo->conditions($conditions); + $expected = " WHERE `Correction`.`source` collate utf8_bin IN ('kiwi', 'pear')"; + $this->assertEquals($expected, $result); + $conditions = array('title' => 'user(s)'); $result = $this->Dbo->conditions($conditions); $expected = " WHERE `title` = 'user(s)'"; @@ -2499,6 +2504,23 @@ public function testArrayConditionsParsing() { $this->assertEquals($expected, $result); } +/** + * Test that array conditions with only one element work. + * + * @return + */ + public function testArrayConditionsOneElement() { + $conditions = array('id' => array(1)); + $result = $this->Dbo->conditions($conditions); + $expected = " WHERE id = (1)"; + $this->assertEquals($expected, $result); + + $conditions = array('id NOT' => array(1)); + $result = $this->Dbo->conditions($conditions); + $expected = " WHERE NOT (id = (1))"; + $this->assertEquals($expected, $result); + } + /** * testArrayConditionsParsingComplexKeys method *