Как заставить вставлять в CakePHP?

У меня есть архивная таблица MySQL со следующей структурой:

    `histories` 
      `uid` int(10) unsigned NOT NULL,
      `type` varchar(255) NOT NULL,
      `param` int(11) NOT NULL,
      `param2` varchar(255) NOT NULL,
      `time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
     ENGINE=ARCHIVE DEFAULT CHARSET=latin1;

Я не хочу добавлять автоинкрементный столбец id. Движок этой таблицы - архив, и он делает именно то, что мне нужно, с этой структурой.

Я хочу сохранить как это:

$this->History->create();
$this->History->save(['uid' => uid, 'type' => 'deleted_entry', 'param' => $thing_id]);

Но CakePHP вынуждает обновление, которое я не хочу, и движок ARCHIVE не поддерживает. Кажется, что Cake ищет первичный ключ uid, находит его и решает, что он должен обновиться, и, кажется, нет флага для принудительной вставки. Я не хочу прибегать к $this->Model->query(),

ОБНОВЛЕНИЕ: Установить $primaryKey = null в AppModel. $this->create(); потом вставлю.

class History extends AppModel {
    public $primaryKey = null;
}

Если вы хотите сделать обновление после, просто:

$this->History->primaryKey = 'uid'; перед save()

1 ответ

Решение

Вы можете сказать Cake 2, что у вас нет первичного ключа, установив модель $primaryKey собственность на null:

$this->History->primaryKey = null;
$this->History->create();
$this->History->save(['uid' => uid, 'type' => 'deleted_entry', 'param' => $thing_id]);
Другие вопросы по тегам