问题描述
我有以下模型:
事件表
$this->belongsToMany('Hosts',[
'foreignKey' => 'event_id','targetForeignKey' => 'host_id','joinTable' => 'events_hosts',]);
HostsTable
$this->belongsToMany('Hosts',[
'foreignKey' => 'host_id','targetForeignKey' => 'event_id',]);
在我的“事件编辑”中,我有一个带有复选框的主机列表。 简单例子:
查看(edit.PHP)
----------------
Event name (text input)
Event begin date
Event end date
Hosts-list: *(checkBoxes)*
[] Host1
[x] Host2
[x] Host3
[] Host4
----------------
复选框看起来像这样 <input type="checkBox" name="Hosts[]" value="<?= $host_id; ?>" <?= $checked; ?> />
=> 我正在尝试保存/更新“连接的主机”。所以基本上我只想在 events_hosts 表中保存 host_ids。 问题:我不确定如何在 cakePHP 4 中使用简单的 save() 来实现这一点
我也看了这个https://book.cakephp.org/4/en/views/helpers/form.html#creating-inputs-for-associated-data
这不起作用$this->Form->control('hosts.'.$host_id.'',['type' => 'checkBox','checked' => $checked ])
& this 在控制器中
$this->Events->patchEntity($event,$this->request->getData(),['associated' => ['Hosts' => ['validate' => false]]]);
它只会删除 events_hosts 表中给定 event_id 的所有内容,但不会添加新条目。
=> 这是我目前用来保存/更新 events_hosts 表的内容。但这很丑陋,而不是 cakePHP 方式
if ($this->Events->save($event)) {
$this->Events->EventsHosts->deleteall(['event_id' => $id]);
$selected_hosts = $this->request->getData()['Hosts'] ?? [];
$query = $this->Events->EventsHosts->query();
foreach ($selected_hosts as $host_id) {
$query
->insert(['event_id','host_id'])
->values([
'event_id' => $id,'host_id' => $host_id,]);
}
$query->execute();
$this->Flash->success(__('saved.'));
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)