我的外键字段有问题:我创建了一个categories
表MySQLWorkbench
,该表与1:n
关系链接到另一个表:{{1} }。它似乎有效,因为在Articles
中,有一个Articles
“INT”字段。
我烘焙整个项目,一切正常,除了这个外键:而不是一个输入会收到我想写的“数字”来指定categories_id
号码,有一种空的“选择” “(list)不包含任何内容,因此我无法为我的数据库中的categories_id
字段输入任何数字:
这是图像:
如果我尝试“强制”并添加“文章”(所以没有类别),则会出现此错误:
错误:SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败(
categories_id
。ecommerce
,CONSTRAINTarticles
FOREIGN KEY(fk_articles_categories
)参考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)
答案 0 :(得分:1)
这是因为命名约定..如果你的表被调用categories
,那么articles
中的外键应该是category_id
(单数),并且必须调用模型{{1 }}。控制器应该向视图传递一个名为'$ categories'(plurar)的变量
Category
并且视图中的输入必须是:
$this->set('categories',$this->Article->Category->find('list'))
不要忘记更改模型中的外键
希望这会有所帮助:)