Я создаю свой первый настоящий проект 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');
?>
Этот запрос был создан вручную или у вас есть ошибка, которая была отображена на экране? Вы можете развернуть ошибки, сгенерированные на экране, чтобы проверить генерируемый синтаксис SQL. –
Когда я запускаю запрос вручную, он работает нормально. Когда я выдаю $ 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
Итак, вот в чем проблема: запрос генерируется неправильно, отсутствуют другие поля. Можете ли вы обновить свой вопрос em post, как вы создали форму? –