CakePHP SaveAssociated/SaveAll忽略字段

CakePHP SaveAssociated/SaveAll忽略字段,php,cakephp,cakephp-2.3,Php,Cakephp,Cakephp 2.3,我遇到了一个问题,CakePHP忽略了保存我指定的字段,而是创建额外的记录。我使用的是CakePHP2.3.6 我的桌子看起来像这样: CREATE TABLE `events_guests` ( `id` int(11) NOT NULL AUTO_INCREMENT, `guest_id` int(11) NOT NULL, `event_id` int(11) NOT NULL, `promoter_id` int(11) DEFAULT NULL, `created`

我遇到了一个问题,CakePHP忽略了保存我指定的字段,而是创建额外的记录。我使用的是CakePHP2.3.6

我的桌子看起来像这样:

CREATE TABLE `events_guests` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `guest_id` int(11) NOT NULL,
  `event_id` int(11) NOT NULL,
  `promoter_id` int(11) DEFAULT NULL,
  `created` datetime NOT NULL,
  `modified` datetime NOT NULL,
  `attended` varchar(15) NOT NULL DEFAULT 'No',
  PRIMARY KEY (`id`)
)
这是密码

public function addGuest($event_id, $promoter_id = null) {
if ($this->request->is('post')) {
                $this->Guest->create();
                $event_data = array('event_id' => $event_id);
                $data = $this->request->data;
                $data['Event'] = $event_data;
                if($promoter_id) {
                    $data['Event']['promoter_id'] = $promoter_id;
                }
                if ($this->Guest->saveAssociated($data)) {
                    $this->Session->setFlash(__('The guest has been added to the guestlist'), 'flash/success');
                } else {
                $this->Session->setFlash(__('The guest could not be saved. Please, try again.'), 'flash/error');
                }
以下是我正在尝试保存的数据:

Array (
  [Guest] => Array
    (
      [first_name] => Joe
      [last_name] => Schmoe
    )
  [Event] => Array
    (
       [event_id] => 1
       [promoter_id] => 2
    )
)
我的模型如下:

class Guest extends AppModel {
public $hasAndBelongsToMany = array(
        'Event' => array(
            'className' => 'Event',
            'joinTable' => 'events_guests',
            'foreignKey' => 'guest_id',
            'associationForeignKey' => 'event_id',
            'unique' => 'true',
        ), 
        'Promoter' => array(
            'className' => 'Promoter',
            'joinTable' => 'events_guests',
            'foreignKey' => 'guest_id',
            'associationForeignKey' => 'promoter_id',
            'unique' => 'true',
        )
    );
}

结果是两条EventsGuests记录,都没有
启动子id

一条记录按预期接收
事件\u id=1

其他记录接收
事件\u id=2
,它实际上是
发起人\u id

我尝试过混合使用
saveAssociated
saveAll


非常感谢您的帮助!谢谢大家!

参考资料:

对于您的问题,不要使用HABTM,因为HABTM通常用于连接两个表

因此,如果您有两个以上的字段,请创建一个模型并像belongsTo一样使用它,并且有许多关系

class Event extends AppModel {

  $hasMany = array(
    'EventGuest' => array(
      'className' => 'EventGuest',
      'foreignKey' => 'event_id'    
    )
  );

}

class Guest extends AppModel {

  $hasMany = array(
    'EventGuest' => array(
      'className' => 'EventGuest',
      'foreignKey' => 'guest_id'    
    )
  );

}

class Promoter extends AppModel {

  $hasMany = array(
    'EventGuest' => array(
      'className' => 'EventGuest',
      'foreignKey' => 'promoter_id'    
    )
  );

}
现在,你的关系模型

class EventGuest extends AppModel {

  $belongsTo = array(
    'Event' => array(
      'className' => 'Event',
      'foreignKey' => 'event_id'
    ),
    'Guest' => array(
      'className' => 'Guest',
      'foreignKey' => 'guest_id'
    ),
    'Promoter' => array(
      'className' => 'Promoter',
      'foreignKey' => 'promoter_id'
    )
  );

}
并继续使用您的代码

public function addGuest($event_id, $promoter_id = null) {
  if ($this->request->is('post')) {
    $this->Guest->create();
    $event_data = array('event_id' => $event_id);
    $data = $this->request->data;
    $data['Event'] = $event_data;
    if($promoter_id) {
      // EDITED
      $data['Promoter']['promoter_id'] = $promoter_id;
    }

    if ($this->Guest->saveAssociated($data)) {
      $this->Session->setFlash(__('The guest has been added to the guestlist'), 'flash/success');
    } else {
      $this->Session->setFlash(__('The guest could not be saved. Please, try again.'), 'flash/error');
    }
  }
}

如果我的问题能帮助你解决问题,别忘了投票并标记为“已解决”。谢谢你的回答,帕特里克。这有点帮助,但仍然有点卡住。现在它仍然创建了2条记录,但是第一条记录的
事件id
设置为空
发起人id
,第二条记录的
事件id
为空,并且正确的
发起人id
我仍在使用它,它将在您可以编辑问题并放置模型的关系数组时更新?只是好奇。是的,我刚刚添加了模型关联。仍然没有让这个工作。非常感谢你和我一起看这个@BryanZwicker我更新我的答案,看看并告诉我现在是否有效。我认为这是更好的解决办法。
public function addGuest($event_id, $promoter_id = null) {
  if ($this->request->is('post')) {
    $this->Guest->create();
    $event_data = array('event_id' => $event_id);
    $data = $this->request->data;
    $data['Event'] = $event_data;
    if($promoter_id) {
      // EDITED
      $data['Promoter']['promoter_id'] = $promoter_id;
    }

    if ($this->Guest->saveAssociated($data)) {
      $this->Session->setFlash(__('The guest has been added to the guestlist'), 'flash/success');
    } else {
      $this->Session->setFlash(__('The guest could not be saved. Please, try again.'), 'flash/error');
    }
  }
}