Как заставить вставлять в CakePHP? - PullRequest
0 голосов
/ 23 мая 2018

У меня есть архивная таблица 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 Ответ

0 голосов
/ 23 мая 2018

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

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