Cakephp 3保存关联不起作用

时间:2017-06-07 13:19:29

标签: php cakephp cakephp-3.0 web-deployment

我尝试制作一篇包含文章和标签的博客但由于某种原因我的标签在创建文章时不会保存。 我确实遵循了官方蛋糕博客和来自这里的一些想法,但对我来说没有运气..也许我做错了什么,我没看到。

关键字表

CREATE TABLE `keywords` (
  `id` int(11) NOT NULL,
  `article_id` int(11) DEFAULT NULL,
  `tag` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

表模型 关键词:

class KeywordsTable extends Table
{
......................
    public function initialize(array $config)
    {
        parent::initialize($config);

        $this->table('keywords');
        $this->displayField('id');
        $this->primaryKey('id');

        $this->belongsTo('Article', [
            'foreignKey' => 'article_id',
            'joinType' => 'INNER'
        ]);
    }
....................
}

class ArticleTable extends Table
{
    public function initialize(array $config)
    {
        parent::initialize($config);

        $this->table('article');
        $this->displayField('id');
        $this->primaryKey('id');

        $this->addBehavior('Timestamp');

        $this->belongsTo('Users', [
            'foreignKey' => 'user_id',
            'joinType' => 'INNER'
        ]);

        $this->hasMany('Keywords', [
            'foreignKey' => 'article_id'
        ]);
    }
......................................
}

这是我的控制器:

public function add()
{

        //$this->autoRender = false;
        $article = $this->Article->newEntity();


        if ($this->request->is('post')) {

        $article = $this->Article->patchEntity($article, $this->request->data, ['associated'=>['Keywords']]);
        echo "<pre>";
        print_r($this->Article->save($article));
        die();
        }
}

这是我在表单中使用的代码

<?= $this->Form->input('article[keywords][]', ['label'=>false, 'class' => 'form-control', 'placeholder' => 'keywords', 'templates' => ['inputContainer' => '{{content}}']]); ?>

所以如果有人能帮助我,我会很感激。

2 个答案:

答案 0 :(得分:0)

好的,4小时后我找到了问题。 问题出现在我的视图输入中。

应该是 article.0.tag 而不是文章[关键字] [] 改变了,现在一切都有效。

此致

答案 1 :(得分:0)

在控制器中你应该使用相关的数组more details -

$this->Article->save($article,['associated' => ['Keywords']]);

并在视图文件中,输入这样的输入字段 -

<?= $this->Form->input('keywords.0.title', ['label'=>false, 'class' => 'form-control', 'placeholder' => 'keywords', 'templates' => ['inputContainer' => '{{content}}']]); ?>

more details