0

CakePHP が指定したフィールドの保存を無視し、代わりに余分なレコードを作成するという問題があります。CakePHP 2.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',
        )
    );
}

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

これからの結果は、EventsGuests の 2 つのレコードであり、どちらもpromoter_id.

1 つのレコードevent_id = 1が AS EXPECTEDを受け取る

他のレコードは を受け取りますevent_id = 2。これは実際にはpromoter_id

saveAssociatedとの組み合わせを使用してみましたsaveAll

どんな助けでも大歓迎です!ありがとうございました!

4

1 に答える 1