2012-02-29 22 views
0

私の最初の本当のCakePHPプロジェクトを作成しています。私はマニュアルを読んで、ブログチュートリアルを終えましたが、決して専門家ではありません。フォームヘルパーで生成されたフォームを使用してデータベースにデータを追加する際に問題が発生しました。フォームには2つのテキスト入力といくつかの選択ボックスがあり、すべてが正しく入力されています。フォームに記入して送信を押すと、最初の選択ボックスに外部キー制約エラーがあることがわかります。しかし、私は$ this-> request->データをデバッグするとき、それに関連付けられた正しい値を持っています。ここにデバッグがあります。CAKEPHPの外部キー制約 - デバッグで正しい値が表示される

Array 
(
    [car] => Array 
     (
     [stock] => G123456 
     [vin] => 12345678 
     [make_id] => 1 
     [car_model_id] => 2 
     [year_id] => 20 
     [location_id] => 9 
     [service_status_id] => 1 
     [type_id] => 6 
     ) 

) 

私のスキーマは、私はmysqlのコンソールから直接挿入を行なったし、それは完全に働い正しかったことを確認します。ここに私が走った命令があります。

INSERT INTO cars (stock, vin, make_id, car_model_id, year_id, location_id, service_status_id, type_id) VALUES ('G123456', '12345678', '1', '2', '20', '9', '1', '6'); 

私が呼ぶとき、それは私に、外部キー制約エラーを与えている理由はわからない:

$car = $this->Car->save($this->request->data); 

任意のアイデア?

EDIT CakePHPの中のエラーの下クエリは次のとおりです。

INSERT INTO `cars` (`modified`, `created`) VALUES ('2012-02-29 15:53:21', '2012-02-29 15:53:21') 

私はmysqlのコンソールからそのクエリを実行すると私は同じエラーを取得します。外部キー制約が失敗し、make_id - 参照が私のコントローラでアドオン()関数である。ここ

をmake.id:

<?php 
echo $this->Form->create('Car', array('action' => 'add')); 
echo $this->Form->input('car.stock'); 
echo $this->Form->input('car.vin'); 
echo $this->Form->input('car.make_id'); 
echo $this->Form->input('car.car_model_id'); 
echo $this->Form->input('car.year_id'); 
echo $this->Form->input('car.location_id'); 
echo $this->Form->input('car.service_status_id'); 
echo $this->Form->input('car.type_id'); 
echo $this->Form->end('Add'); 
?> 
+0

このクエリは、手動で作成したか、または画面に表示されたエラーを受け取りましたか?生成されたSQL構文を確認するために、画面上で生成されたエラーを展開することができます。 –

+0

私は手動でクエリを実行すると正常に動作します。 $ car = $ this-> Car-> save($ this-> request-> data)を発行すると、make_idに外部キー制約エラーが発生します。エラーの真下にあるCakeのエラーに表示されるクエリは次のとおりです。 SQLクエリ:INSERT INTO 'cars'(' modified'、 'created')VALUES( '2012-02-29 15:53:21'、 ' 2012-02-29 15:53:21 ') – Stewie

+0

これは問題です。クエリが間違って生成されていて、他のフィールドがありません。あなたはあなたの質問を更新できますか?どのようにフォームを作成しましたか? –

答えて

1

問題がある:

public function add() 
{ 
    $this->set('years', $this->Car->Year->find('list')); 
    $this->set('makes', $this->Car->Make->find('list')); 
    $this->set('carModels', $this->Car->CarModel->find('list')); 
    $this->set('locations', $this->Car->Location->find('list')); 
    $this->set('types', $this->Car->Type->find('list')); 
    $this->set('serviceStatuses', $this->Car->ServiceStatus->find('list')); 
    if(!empty($this->request->data)) 
    { 
     $car = $this->Car->save($this->request->data); 
     //debug($this->request->data, true); 
    } 
} 

そしてここでは、ビューファイルであります景色。各フォーム入力の先頭からcar.を削除します。それは必要ではありません。作成するとCarというモデルが接頭辞として使用され、問題が解決されます。

<?php 
echo $this->Form->create('Car', array('action' => 'add')); 
echo $this->Form->input('stock'); 
echo $this->Form->input('vin'); 
echo $this->Form->input('make_id'); 
echo $this->Form->input('car_model_id'); 
echo $this->Form->input('year_id'); 
echo $this->Form->input('location_id'); 
echo $this->Form->input('service_status_id'); 
echo $this->Form->input('type_id'); 
echo $this->Form->end('Add'); 
?> 
関連する問題