Ограничение внешнего ключа CAKEPHP - отладка показывает правильные значения - PullRequest
0 голосов
/ 29 февраля 2012

Я создаю свой первый настоящий проект CakePHP.Я прочитал руководство и прошел учебник по блогу, но ни в коем случае не эксперт.У меня проблема с добавлением данных в базу данных через форму, созданную с помощью помощника по форме.Форма имеет два текстовых ввода и несколько полей выбора, все из которых заполняются правильно.Когда я заполняю форму и нажимаю «Отправить», она говорит мне, что у меня есть ошибка ограничения внешнего ключа в первом окне выбора.Однако, когда я отлаживаю $ this-> request-> data, он имеет правильные значения, связанные с ним.Вот отладка.

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

Есть идеи?

РЕДАКТИРОВАТЬ Запрос по ошибке в CakePHP:

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

Когда я запускаю этот запрос из консоли MySQL, я получаю ту же ошибку.Сбой ограничения внешнего ключа, 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');
?>

1 Ответ

1 голос
/ 01 марта 2012

Проблема в представлении.Удалите 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');
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...