Skip to content
Permalink
Browse files

Make the Fixture generation correctly handle composite foreign keys

With MySQL only for the moment
  • Loading branch information...
HavokInspiration committed Jun 12, 2015
1 parent 7bb51c4 commit 23cffae707c8cba9b1eb53fa271d66c6e17bf0bd
@@ -418,11 +418,20 @@ protected function _keySql($prefix, $data)
}
}
if ($data['type'] === Table::CONSTRAINT_FOREIGN) {
if (!is_array($data['references'][1])) {
$data['references'][1] = [$data['references'][1]];
}
$columnsReference = array_map(
[$this->_driver, 'quoteIdentifier'],
$data['references'][1]
);
return $prefix . sprintf(
' FOREIGN KEY (%s) REFERENCES %s (%s) ON UPDATE %s ON DELETE %s',
implode(', ', $columns),
$this->_driver->quoteIdentifier($data['references'][0]),
$this->_driver->quoteIdentifier($data['references'][1]),
implode(', ', $columnsReference),
$this->_foreignOnClause($data['update']),
$this->_foreignOnClause($data['delete'])
);
@@ -0,0 +1,45 @@
<?php
/**
* CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice
*
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
* @since 3.0.7
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
namespace Cake\Test\Fixture;
use Cake\TestSuite\Fixture\TestFixture;
/**
* Class CustomersFixture
*
*/
class CustomersFixture extends TestFixture
{
/**
* fields property
*
* @var array
*/
public $fields = [
'id' => ['type' => 'integer', 'null' => false],
'fullname' => ['type' => 'string', 'null' => false],
'_constraints' => ['primary' => ['type' => 'primary', 'columns' => ['id']]]
];
/**
* records property
*
* @var array
*/
public $records = [
['fullname' => 'John Doe']
];
}
@@ -0,0 +1,75 @@
<?php
/**
* CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice
*
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
* @since 3.0.7
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
namespace Cake\Test\Fixture;
use Cake\TestSuite\Fixture\TestFixture;
/**
* Class ProductOrdersFixture
*
*/
class ProductOrdersFixture extends TestFixture
{
/**
* fields property
*
* @var array
*/
public $fields = [
'id' => ['type' => 'integer'],
'product_category' => ['type' => 'integer', 'null' => false],
'product_id' => ['type' => 'integer', 'null' => false],
'customer_id' => ['type' => 'integer', 'null' => false],
'_indexes' => [
'product_category' => [
'type' => 'index',
'columns' => ['product_category', 'product_id']
],
'customer_id' => [
'type' => 'index',
'columns' => ['customer_id']
]
],
'_constraints' => [
'primary' => [
'type' => 'primary', 'columns' => ['id']
],
'product_order_ibfk_1' => [
'type' => 'foreign',
'columns' => ['product_category', 'product_id'],
'references' => ['product', ['category', 'id']],
'update' => 'cascade',
'delete' => 'cascade',
],
'product_order_ibfk_2' => [
'type' => 'foreign',
'columns' => ['customer_id'],
'references' => ['customer', 'id'],
'update' => 'cascade',
'delete' => 'cascade',
]
]
];
/**
* records property
*
* @var array
*/
public $records = [
['product_category' => 1, 'product_id' => 1, 'customer_id' => 1]
];
}
@@ -0,0 +1,49 @@
<?php
/**
* CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice
*
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
* @since 3.0.7
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
namespace Cake\Test\Fixture;
use Cake\TestSuite\Fixture\TestFixture;
/**
* Class ProductsFixture
*
*/
class ProductsFixture extends TestFixture
{
/**
* fields property
*
* @var array
*/
public $fields = [
'id' => ['type' => 'integer'],
'category' => ['type' => 'integer', 'null' => false],
'name' => ['type' => 'string', 'null' => false],
'price' => ['type' => 'integer'],
'_constraints' => ['primary' => ['type' => 'primary', 'columns' => ['id', 'category']]]
];
/**
* records property
*
* @var array
*/
public $records = [
['category' => 1, 'name' => 'First product', 'price' => 10],
['category' => 2, 'name' => 'Second product', 'price' => 20],
['category' => 3, 'name' => 'Third product', 'price' => 30]
];
}

0 comments on commit 23cffae

Please sign in to comment.
You can’t perform that action at this time.