将数据保存到CakePHP 3中的连接表

时间:2016-11-01 08:47:07

标签: php cakephp cakephp-3.0

我试图将其他数据保存到CakePHP 3中的连接表中。 协会看起来像:articles => model_tags< =>标签(表格)。

在TagsTable和文章表I中:

$this->belongsToMany('Tags', [
        'joinTable' => 'model_tags',
        'foreignKey' => 'foreign_id'
    ]);

文章和标签之间的关联在model_tags表中正确保存。但我想将其他数据保存到字段' model_name'在model_tags表中,因为将来我想将model_tags表用于另一个模型。因此,在这种情况下,通过文章保存在model_tags中的所有标签关联都应该包含在字段“model_name'字符串"文章"。

重点是 - 我应该把代码放在哪里?我几个小时后就在解决这个问题。我认为beforeSave应该是最好的选择。

我已经想通了,我可以将数据放在单独的记录中:

$tag = $this->Tags->findByTitle('heregoestagtitle')->first();
$tag->_joinData = $this->ModelTags->newEntity();
$tag->_joinData->model_name = 'articles';
$this->Tags->link($entity, [$tag]);

但当然在我的情况下它不会起作用,因为我会为每篇文章保存很少的标签,因此在model_tags表中也会有很少的关联记录。

如何以正确的方式将数据放入连接表?

1 个答案:

答案 0 :(得分:0)

您需要在调用控制器中的save方法之前格式化数据数组,如

foreach ($this->request->data['model_tags'] as $key => $value) {       
    $this->request->data['model_tags'][$key]['_joinData']['model_name '] = 'articles';
}

希望它能帮到你