更新:从表单输入中删除0,从会话中删除s,同时还将预订hasMany Sessions的关系更改为Booking hasOne Session。
所以我有4个与此相关的表:
使用我的表单时,我会尝试保存预订,会话和& Sessionplayer_sessions。下面的表单输入是Sessionplayer_sessions的唯一相关字段:
<?php echo $this->Form->input('session.sessionplayers._ids', ['type' => 'select', 'options'=>'','multiple']); ?>
表单输入中的选项显示为空白,来自双列表jQuery脚本,允许选择多个项目。
然而,当我尝试保存时,上述输入中的任何内容实际上都没有发布到Sessionplayer_sessions表中,而Bookings&amp;会话已成功发布。
在Controller中,这就是newEntity&amp; patchEntity部分如下所示:
$booking = $this->Bookings->newEntity($this->request->data(),[
'associated'=>[
'Sessions' => ['associated' => ['Guestengineers', 'Sessionplayers']]
]]);
if($this->request->is('post')){
$data = $this->request->data;
$booking = $this->Bookings->patchEntity($booking, $data, [
'associated'=>[
'Sessions' => ['associated' => ['Guestengineers', 'Sessionplayers']]
]
]);
Sessions和Sessionplayers表的相应模型:
会话:
public function initialize(array $config)
{
parent::initialize($config);
$this->table('sessions');
$this->displayField('id');
$this->primaryKey('id');
$this->addBehavior('Timestamp');
$this->belongstoMany('Sessionplayers', [
'foreignKey' => 'session_id',
'targetForeignKey' => 'sessionplayer_id',
'joinTable' => 'Sessionplayers_sessions'
]);
}
Sessionplayers:
public function initialize(array $config)
{
parent::initialize($config);
$this->table('sessionplayers');
$this->displayField('id');
$this->primaryKey('id');
$this->addBehavior('Timestamp');
$this->belongstoMany('Sessions', [
'foreignKey' => 'sessionplayer_id',
'targetForeignKey' => 'session_id',
'joinTable' => 'Sessionplayers_sessions'
]);
}
结果:
更新表格输入和预订与安排之间的关系。会话表并重新提交:
在帖子数据中,会话播放器现在是会话数组中的一个数组。在sessionplayers数组中有一个属性:_ids,其值引用在表单输入的多重选择中选择的第一个会话播放器的id - 例如,如果我选择了第3个会话播放器和第4个会话播放器,则_ids = 3。 ,在数据库本身,虽然能够成功插入预订和会话表数据,但sessionplayers_session的表却没有。
基本上:请求数据数组如下:Session(array) - &gt; Sessionplayers(数组) - &gt; _ids = 3。
在SQL日志中,只发生了两个Insert Into SQL语句,一个用于预订,一个用于会话。 Sessionplayers_sessions没有这样的插入。
答案 0 :(得分:-1)
我认为在从表单输入中删除0并将关系从OneToMany更改为OneToOne后,我设法修复了它,通过在[]中添加来表示可能有多个项目被选中。