Fixing habtm joins for tables with two uuid fields, no primary key and a defined join model. Adding fixtures.

git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@7953 3807eeeb-6ff5-0310-8944-8be069107fe0
This commit is contained in:
mark_story 2008-12-23 23:28:08 +00:00
parent 0c29a7e1b1
commit b063f22f31
5 changed files with 217 additions and 3 deletions

View file

@ -719,7 +719,7 @@ class Model extends Overloadable {
$this->{$type}[$assocKey]['joinTable'] = $this->{$joinClass}->table; $this->{$type}[$assocKey]['joinTable'] = $this->{$joinClass}->table;
} }
if (count($this->{$joinClass}->schema()) <= 2) { if (count($this->{$joinClass}->schema()) <= 2 && $this->{$joinClass}->primaryKey !== false) {
$this->{$joinClass}->primaryKey = $this->{$type}[$assocKey]['foreignKey']; $this->{$joinClass}->primaryKey = $this->{$type}[$assocKey]['foreignKey'];
} }
} }

View file

@ -66,7 +66,8 @@ class ModelTest extends CakeTestCase {
'core.overall_favorite', 'core.account', 'core.content', 'core.content_account', 'core.overall_favorite', 'core.account', 'core.content', 'core.content_account',
'core.film_file', 'core.test_plugin_article', 'core.test_plugin_comment', 'core.uuiditem', 'core.film_file', 'core.test_plugin_article', 'core.test_plugin_comment', 'core.uuiditem',
'core.counter_cache_user', 'core.counter_cache_post', 'core.uuidportfolio', 'core.counter_cache_user', 'core.counter_cache_post', 'core.uuidportfolio',
'core.uuiditems_uuidportfolio', 'core.uuiditems_uuidportfolio_numericid' 'core.uuiditems_uuidportfolio', 'core.uuiditems_uuidportfolio_numericid',
'core.fruit', 'core.fruits_uuid_tag', 'core.uuid_tag'
); );
/** /**
* start method * start method
@ -310,6 +311,29 @@ class ModelTest extends CakeTestCase {
$result = $TestModel->read(null, $id); $result = $TestModel->read(null, $id);
$this->assertEqual(1, count($result['Uuiditem'])); $this->assertEqual(1, count($result['Uuiditem']));
} }
/**
* test HABTM saving when join table has no primary key and only 2 columns.
*
* @return void
**/
function testHabtmSavingWithNoPrimaryKeyUuidJoinTable() {
$this->loadFixtures('UuidTag', 'Fruit', 'FruitsUuidTag');
$Fruit =& new Fruit();
$data = array(
'Fruit' => array(
'color' => 'Red',
'shape' => 'Heart-shaped',
'taste' => 'sweet',
'name' => 'Strawberry',
),
'UuidTag' => array(
'UuidTag' => array(
'481fc6d0-b920-43e0-e50f-6d1740cf8569'
)
)
);
$this->assertTrue($Fruit->save($data));
}
/** /**
* testHabtmUuidWithNumericId method * testHabtmUuidWithNumericId method
* *

64
cake/tests/fixtures/fruit_fixture.php vendored Normal file
View file

@ -0,0 +1,64 @@
<?php
/* SVN FILE: $Id$ */
/**
* Short description for file.
*
* Long description for file
*
* PHP versions 4 and 5
*
* CakePHP(tm) Tests <https://trac.cakephp.org/wiki/Developement/TestSuite>
* Copyright 2005-2008, Cake Software Foundation, Inc. (http://www.cakefoundation.org)
*
* Licensed under The Open Group Test Suite License
* Redistributions of files must retain the above copyright notice.
*
* @filesource
* @copyright Copyright 2005-2008, Cake Software Foundation, Inc. (http://www.cakefoundation.org)
* @link https://trac.cakephp.org/wiki/Developement/TestSuite CakePHP(tm) Tests
* @package cake.tests
* @subpackage cake.tests.fixtures
* @since CakePHP(tm) v 1.2.0.7953
* @version $Revision$
* @modifiedby $LastChangedBy$
* @lastmodified $Date$
* @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
*/
/**
* Short description for class.
*
* @package cake.tests
* @subpackage cake.tests.fixtures
*/
class FruitFixture extends CakeTestFixture {
/**
* name property
*
* @var string 'Fruit'
* @access public
*/
var $name = 'Fruit';
/**
* fields property
*
* @var array
* @access public
*/
var $fields = array(
'id' => array('type' => 'string', 'length' => 36, 'key' => 'primary'),
'name' => array('type' => 'string', 'length' => 255),
'color' => array('type' => 'string', 'length' => 13),
'shape' => array('type' => 'string', 'length' => 255),
'taste' => array('type' => 'string', 'length' => 255)
);
/**
* records property
*
* @var array
* @access public
*/
var $records = array(
array('id' => '481fc6d0-b920-43e0-a40d-6d1740cf8569', 'name' => 'Orange', 'color' => 'orange', 'shape' => 'Spherical', 'taste' => 'Tangy & Sweet')
);
}
?>

View file

@ -0,0 +1,64 @@
<?php
/* SVN FILE: $Id$ */
/**
* Short description for file.
*
* Long description for file
*
* PHP versions 4 and 5
*
* CakePHP(tm) Tests <https://trac.cakephp.org/wiki/Developement/TestSuite>
* Copyright 2005-2008, Cake Software Foundation, Inc. (http://www.cakefoundation.org)
*
* Licensed under The Open Group Test Suite License
* Redistributions of files must retain the above copyright notice.
*
* @filesource
* @copyright Copyright 2005-2008, Cake Software Foundation, Inc. (http://www.cakefoundation.org)
* @link https://trac.cakephp.org/wiki/Developement/TestSuite CakePHP(tm) Tests
* @package cake.tests
* @subpackage cake.tests.fixtures
* @since CakePHP(tm) v 1.2.0.7953
* @version $Revision$
* @modifiedby $LastChangedBy$
* @lastmodified $Date$
* @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
*/
/**
* Short description for class.
*
* @package cake.tests
* @subpackage cake.tests.fixtures
*/
class FruitsUuidTagFixture extends CakeTestFixture {
/**
* name property
*
* @var string 'FruitsUuidTag'
* @access public
*/
var $name = 'FruitsUuidTag';
/**
* fields property
*
* @var array
* @access public
*/
var $fields = array(
'fruit_id' => array('type' => 'string', 'null' => false, 'length' => 36, 'key' => 'primary'),
'uuid_tag_id' => array('type' => 'string', 'null' => false, 'length' => 36, 'key' => 'primary'),
'indexes' => array(
'unique_fruits_tags' => array('unique' => true, 'column' => array('fruit_id', 'uuid_tag_id')),
),
);
/**
* records property
*
* @var array
* @access public
*/
var $records = array(
array('fruit_id' => '481fc6d0-b920-43e0-a40d-6d1740cf8569', 'uuid_tag_id' => '481fc6d0-b920-43e0-e50f-6d1740cf8569')
);
}
?>

View file

@ -0,0 +1,62 @@
<?php
/* SVN FILE: $Id$ */
/**
* Short description for file.
*
* Long description for file
*
* PHP versions 4 and 5
*
* CakePHP(tm) Tests <https://trac.cakephp.org/wiki/Developement/TestSuite>
* Copyright 2005-2008, Cake Software Foundation, Inc. (http://www.cakefoundation.org)
*
* Licensed under The Open Group Test Suite License
* Redistributions of files must retain the above copyright notice.
*
* @filesource
* @copyright Copyright 2005-2008, Cake Software Foundation, Inc. (http://www.cakefoundation.org)
* @link https://trac.cakephp.org/wiki/Developement/TestSuite CakePHP(tm) Tests
* @package cake.tests
* @subpackage cake.tests.fixtures
* @since CakePHP(tm) v 1.2.0.7953
* @version $Revision$
* @modifiedby $LastChangedBy$
* @lastmodified $Date$
* @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
*/
/**
* Short description for class.
*
* @package cake.tests
* @subpackage cake.tests.fixtures
*/
class UuidTagFixture extends CakeTestFixture {
/**
* name property
*
* @var string 'UuidTag'
* @access public
*/
var $name = 'UuidTag';
/**
* fields property
*
* @var array
* @access public
*/
var $fields = array(
'id' => array('type' => 'string', 'length' => 36, 'key' => 'primary'),
'name' => array('type' => 'string', 'length' => 255),
'created' => array('type' => 'datetime')
);
/**
* records property
*
* @var array
* @access public
*/
var $records = array(
array('id' => '481fc6d0-b920-43e0-e50f-6d1740cf8569', 'name' => 'MyTag', 'created' => '2009-12-09 12:30:00')
);
}
?>