2011-11-28 16 views
0

私はこのテーブルCakePHP。別の主キーを使用してテーブルのモデルテストを行うにはどうすればよいですか?

CREATE TABLE myexamples.problems (
    id INT, 
    name VARCHAR(45) NULL , 
    pk_id INT AUTO_INCREMENT PRIMARY KEY 
); 

を持っている。しかし、私は、CakePHPでモデルをテストしようとすると、テーブルが2つの自動インクリメント属性を持っているので、それが失敗しました。次のクエリ

CREATE TABLE `test_suite_problems` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(45) DEFAULT NULL, 
    `pk_id` int(11) NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`pk_id`) 
) 
DEFAULT CHARSET=latin1, COLLATE=latin1_swedish_ci, ENGINE=InnoDB; 

昇給このエラー:

"1075: Incorrect table definition; there can be only one auto column and it must be defined as a key" 
私はモデルクラス

<?php 
class Problem extends AppModel { 
    var $name = 'Problem'; 
    var $displayField = 'name'; 
    var $primaryKey='problems'; 
} 
?> 

に持って

しかし、私は、フィールドIDが自動インクリメントを持っていないようにする方法がわかりませんテーブル構造を変更することはできません。

答えて

0

「問題」という名前のフィールドはありません。これは1つの問題です。あなたのPKはpk_idのようですので、primaryKeyの正しいフィールド名を設定してください。

1075: Incorrect table definition; there can be only one auto column and it must be defined as a key 

これは、SQLエラーです:

他の一つは、CakePHPの問題ではありません。あなたは2つの自動増分フィールドを持つことはできません。 2つの自動インクリメントフィールドがない実際のテーブルスキーマと一致するようにフィクスチャを変更してください。

あなたのデータベーススキーマは、CakePHPの規約に従っていません。慣例に従えば、フレームワークの「自動マジック」の問題や利益が大幅に減ります。私はあなたが調理法を焼くことを試みたが、ケーキは慣習に従わないので正しい分野を認識できなかったと思う。

+0

はい、私は$ primaryKey = pk_keyを持っていましたが、これをコピーすると$ primaryKey = problemsが間違いでした。 最後に問題を特定します。 problem_fixture.phpがbakeで作成された場合、var $ fieldsにはauto_numeric、idフィールド、pk_idフィールドの2つのフィールドがあります。私はidのautonumericを削除し、それぞれを更新して問題なく動作させます – Marcelo

+0

これはまさに私があなたに言ったことです。 – burzum

関連する問題