cakePhp和外键:我无法在视图中写入外键

时间:2012-02-16 09:05:15

标签: cakephp foreign-keys foreign-key-relationship

我的外键字段有问题:我创建了一个categoriesMySQLWorkbench,该表与1:n关系链接到另一个表:{{1} }。它似乎有效,因为在Articles中,有一个Articles“INT”字段。

我烘焙整个项目,一切正常,除了这个外键:而不是一个输入会收到我想写的“数字”来指定categories_id号码,有一种空的“选择” “(list)不包含任何内容,因此我无法为我的数据库中的categories_id字段输入任何数字:

这是图像: my categories input

如果我尝试“强制”并添加“文章”(所以没有类别),则会出现此错误:

  

错误:SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败(categories_idecommerce,CONSTRAINT articles FOREIGN KEY( fk_articles_categories)参考categories_idcategories)删除没有更新行动的行动)

这是我的 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)

1 个答案:

答案 0 :(得分:1)

这是因为命名约定..如果你的表被调用categories,那么articles中的外键应该是category_id(单数),并且必须调用模型{{1 }}。控制器应该向视图传递一个名为'$ categories'(plurar)的变量

Category

并且视图中的输入必须是:

$this->set('categories',$this->Article->Category->find('list'))

不要忘记更改模型中的外键

希望这会有所帮助:)