我正在尝试在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']]);
使一切顺利。我很感激对此的一些帮助,因为我已经花了好几天的时间。 感谢
答案 0 :(得分:0)
您希望在模板中使用此功能:
echo $this->Form->input('tags._ids', [
'type' => 'select',
'multiple' => true,
'options' => $tags,
]);
然后Cake marshaller应该自己修复它:)确保实体有这个属性可访问! : - )
您可以在此处查看文档:{{3}}