Cakephp 4 保存belongsToMany 关系只保存关系——蛋糕方式

问题描述

我有以下模型:

事件表


    $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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...