Cakephp3保存了许多表示例标记

时间:2016-12-11 10:04:23

标签: cakephp-3.0

我正在尝试在Cakephp3中创建一个多选下拉菜单。然后更新多对多

我有一个post表和标签表以及一个post_tags表,模型有以下外键

PostsTable
$this->hasMany('PostTags', [
     'foreignKey' => 'post_id'
]);


TagsTable
$this->hasMany('PostTags', [
     'foreignKey' => 'tag_id'
]);

PostTagsTable
$this->belongsTo('Tags', [
    'foreignKey' => 'tag_id',
     'joinType' => 'INNER'
]);

帖子标签表有一个post_id和tag_id

在我的帖子添加视图中我有

echo $ this-> Form-> input(' tags',[' class' =>' form-control',' ; id' =>' select4','标签' => false,'选项' => $标签,'多个&# 39; =>'多个']);

当我在控制器中调试时,我得到了

'tags' => [
    (int) 0 => '1',
    (int) 1 => '2'
],

当我查看堆栈溢出时,似乎我需要这样: (我不是100%确定这是正确的) 答:

$data = [
    'tags' => [
        ['id' => 1],
    ['id' => 2]
    ]
]

我尝试循环遍历$ tag,但调试结果几乎相同: 像这样循环

<div class="input select">
<input type="hidden" name="tags"  value=""id="select4_">
<select name="tags[]" multiple="multiple" class="select4" size="7">
<?php
echo '<option id="tag1" value="tag1">option 1</option>'; 
echo '<option id="tag2" value="tag2" >option 2</option>';
?>
</select>
</div>

我会得到

'tags' => [
    (int) 0 => 'tag1',
    (int) 1 => 'tag2'
],

显然我需要将A:中显示的值传递给控制器​​,然后执行

$post = $this->Posts->patchEntity($post, $this->request->data, ['associated' => ['Tags']]);

使一切顺利。我很感激对此的一些帮助,因为我已经花了好几天的时间。 感谢

1 个答案:

答案 0 :(得分:0)

您希望在模板中使用此功能:

echo $this->Form->input('tags._ids', [
    'type' => 'select',
    'multiple' => true,
    'options' => $tags,
]);

然后Cake marshaller应该自己修复它:)确保实体有这个属性可访问! : - )

您可以在此处查看文档:{​​{3}}