Это на самом деле не решение INSERT IGNORE
, но для решения этой ситуации на уровне приложения вы должны использовать правила проверки. Если вы просто прикрепите правило проверки isUnique
( 2.x ) ( 3.x ) к полю guid
в вашей модели Cake автоматически выйдет из операции сохранения, если guid уже существует.
За кулисами он сделает два запроса к базе данных вместо того, который выдаст INSERT IGNORE
, но это не должно быть большой проблемой.
Возможно, проблема в том, что он вернет false
для этих неудачных операций, и вам придется использовать $this->Model->invalidFields()
, чтобы выяснить, в чем заключалась проблема, и если вы можете ее игнорировать. Вы можете переопределить Model::save()
, чтобы сделать это внутри модели, чтобы вам не приходилось делать это каждый раз в контроллере.
Вы также можете использовать $this->Model->isUnique(array('guid' => $guid))
( 2.x ) ( 3.x ) для проверки вручную перед вы сэкономили. Опять же, вы можете переопределить метод save
и заставить его молча возвращать true
, если guid не уникален, но будьте осторожны с такими вещами.