Hi Andrew,

I'm having exactly the same problem.. I have a HABTM relationship between 
(sports) matches and teams. When I try to create a fixture for the 
MatchesTeam class I get the same error:
*Error: *SQLSTATE[42S02]: Base table or view not found: 1146 Table 
'c0test.matches_teams' doesn't exist 

I have no idea how to repair this because all other fixtures work 
perfectly...

*cricket: *I'm sorry but you don't understand what the problem is. The 
author doesn't set the AUTO INCREMENT twice intentionally. CakePHP does 
this on its own. I have a single-column primary key (named id) and I still 
get this error.
I tried both importing the fixture data from my original table and 
generating them manually and no matter what I do the table (matches_teams) 
is not created.

Dne pondělí, 31. prosince 2012 14:32:15 UTC+1 [email protected] 
napsal(a):
>
> Hey,
>
> I'm having a slight issue with a fixture I'm attempting to create.
>
> Basically I have a Member model and a Group model, and they have a HABTM 
> relationship, I've specified a custom model to handle this relationship 
> 'GroupsMember' as I wish to add methods to that model to query the join 
> table directly.
>
> So when I set this table up in the databse (I use MySQL) I set it up like 
> this:
>
> CREATE 
> TABLE<http://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fcreate-table.html&token=bb120dcb8ba4d4616f66dd10ddcc1a8e>
>  
> IF<http://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fcontrol-flow-functions.html%23function_if&token=bb120dcb8ba4d4616f66dd10ddcc1a8e>
>  
> NOT<http://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Flogical-operators.html%23operator_not&token=bb120dcb8ba4d4616f66dd10ddcc1a8e>
>  
> EXISTS `member_group` (
> `member_id` 
> int<http://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fnumeric-types.html&token=bb120dcb8ba4d4616f66dd10ddcc1a8e>
> ( 11 ) 
> NOT<http://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Flogical-operators.html%23operator_not&token=bb120dcb8ba4d4616f66dd10ddcc1a8e>
>  
> NULL ,
> `grp_id` 
> int<http://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fnumeric-types.html&token=bb120dcb8ba4d4616f66dd10ddcc1a8e>
> ( 11 ) 
> NOT<http://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Flogical-operators.html%23operator_not&token=bb120dcb8ba4d4616f66dd10ddcc1a8e>
>  
> NULL ,
> PRIMARY KEY ( `member_id` , `grp_id` ) 
> ) ENGINE 
> =<http://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fcomparison-operators.html%23operator_equal&token=bb120dcb8ba4d4616f66dd10ddcc1a8e>
>  
> InnoDB DEFAULT 
> CHARSET<http://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Finformation-functions.html%23function_charset&token=bb120dcb8ba4d4616f66dd10ddcc1a8e>
>  
> =<http://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fcomparison-operators.html%23operator_equal&token=bb120dcb8ba4d4616f66dd10ddcc1a8e>
>  
> latin1;
>
> This was all working ok until I attempted to create a fixture for the 
> 'GroupsMember' model. The code I use to do that is as follows:
>
> class GroupsMemberFixture extends CakeTestFixture 
> {
> public $useDbConfig = 'test';
> public $table = 'member_group';
>
> public $fields = array(
>          'member_id' => array('type' => 'integer', 'null' => false, 'key' 
> => 'primary'),
>          'grp_id' => array('type' => 'integer', 'null' => false, 'key' => 
> 'primary'),
>       );
>
> public $records = array(
> array('member_id' => 0, 'grp_id' => 1),
> );
> }
>
> However, when I run the test I get the following error:
> SQLSTATE[42S02]: Base table or view not found: 1146 Table 
> 'instrumentation_test.member_group' doesn't exist
>
> So I decided to log all the SQL queries being generated, and the last one 
> is this:
>
> CREATE TABLE `instrumentation_test`.`member_group` (
> `member_id` int(11) NOT NULL AUTO_INCREMENT,
> `grp_id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY  (`grp_id`)) 
> ENGINE=MEMORY;
>
> If I run that in phpMyAdmin then it fails with the following error:
>
> #1075 - Incorrect table definition; there can be only one auto column and 
> it must be defined as a key
>
> So the addition of the AUTO_INCREMENT is messing things up, and the 
> primary key is only set to be the grp_id not both the grp_id and the 
> members_id.
>
> Is there any-way I can override the SQL cake is generating for this case?
>
> If I change it so that I create the table in the test database and tell 
> the fixture to import the structure from there (using public $import = 
> 'GroupsMember';) then cake generates the following SQL:
>
> CREATE TABLE `instrumentation_test`.`member_group` (
> `member_id` int(11) NOT NULL AUTO_INCREMENT,
> `grp_id` int(11) NOT NULL AUTO_INCREMENT,
> `id` varchar(255) NOT NULL, PRIMARY KEY  (`id`)) ENGINE=MEMORY;
>
> which apart from adding the extra 'id' column has the same AUTO_INCREMENT 
> issue.
>
> What is it that tells cakephp that those fields should be AUTO_INCREMENT? 
> And is it possible for me to make cake specify the primary key as the same 
> as it was for the table I generated?
>
> Thanks,
> Andrew
>
>

-- 
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP

--- 
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/cake-php?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to