У меня проблема с полем внешнего ключа: я создал таблицу categories
с MySQLWorkbench
, которая связана отношением 1:n
с другой таблицей: Articles
.Кажется, это работает, потому что в Articles
есть поле categories_id
"INT".
Я запек весь проект, все работает отлично, кроме этого внешнего ключа: вместо ввода, который получит«число», которое я написал бы, чтобы указать число categories_id
, есть своего рода пустой «выбор» (список), который ничего не содержит, поэтому я не могу ввести любое число для поля categories_id
в моей базе данных:
вот изображение:
Если я попытаюсь «принудительно» и добавить «статью» (то есть без категории), появляется эта ошибка:
Ошибка: SQLSTATE [23000]: Нарушение ограничения целостности: 1452 Не удается добавить или обновить дочернюю строку: сбой ограничения внешнего ключа (ecommerce
. articles
, CONSTRAINT fk_articles_categories
FOREIGN KEY (categories_id
) ССЫЛКИ categories
(id
) НА УДАЛИТЬ НЕТ ДЕЙСТВИЙ ОБ ОБНОВЛЕНИИ НЕТ ДЕЙСТВИЙ)
А вот мой файл add.ctp
(он записан input
для categories_id
, поэтому яне знаю, что изменить):
<div class="articles form">
<?php echo $this->Form->create('Article');?>
<fieldset>
<legend><?php echo __('Add Article'); ?></legend>
<?php
echo $this->Form->input('nom');
echo $this->Form->input('prix');
echo $this->Form->input('categories_id');
?>
Спасибо за вашу помощь
РЕДАКТИРОВАТЬ:
вот что я добавил:
class Article extends AppModel {
var $belongsTo = array(
'Category' => array(
'className' => 'Category',
'foreignKey' => 'category_id'
)
);
}
и:
class Category extends AppModel {
var $hasMany = array(
'Article' => array(
'className' => 'Article',
'foreignKey' => 'category_id'
)
);
}
и в контроллере (add()
):
public function add() {
//$this->set('categories',$this->Article->Category->find('all'));
//$c = $this->Article->Category->find('all', array("recursive"=>-1, 'fields'=>array('id', 'nom')));
$c = $this->Article->Category->find('list');
$this->set('cat', $c);
но, на мой взгляд, pr($cat)
возвращает пустой массив ...
<?php
echo $this->Form->input('nom');
echo $this->Form->input('prix');
echo $this->Form->input('category_id', array('option'=>$cat));
pr($cat);
?>