2012-02-29 1 views
0

Я создаю свой первый настоящий проект CakePHP. Я прочитал руководство и прошел учебник по блогу, но я ни в коем случае не специалист. У меня возникла проблема с добавлением данных в мою базу данных через форму, созданную с помощью хелпера формы. Форма имеет два текстовых ввода и несколько полей выбора, все из которых заполняются правильно. Когда я заполняю форму и нажимаю submit, она сообщает мне, что у меня есть ошибка ограничения внешнего ключа в первом поле выбора. Однако, когда я отлаживаю $ this-> request-> data, у него есть правильные значения, связанные с ним. Вот отладка.Ограничение внешнего ключа 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') 

Когда я запускаю этот запрос из тузда консоли я получаю ту же ошибку. Внешний ключ не выполняется, make_id - ссылка make.id

Вот функция Add() в моем контроллере:

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); 
    } 
} 

А вот файл вид:

<?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 Query: INSERT INTO 'cars' (' modified', 'created') VALUES ('2012-02-29 15:53:21', ' 2012-02-29 15:53:21 ') – Stewie

+0

Итак, вот в чем проблема: запрос генерируется неправильно, отсутствуют другие поля. Можете ли вы обновить свой вопрос em post, как вы создали форму? –

ответ

1

Проблема заключается в том вид. Удалите 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'); 
?> 

 Смежные вопросы

  • Нет связанных вопросов^_^