Cakephp Вставить Игнорировать функцию? - PullRequest
4 голосов
/ 14 мая 2010

Есть ли способ сделать "игнорирование вставки" в торте без использования модели-> функция запроса?

            $this->Model->save(array(
                'id' => NULL,
                'guid' => $guid,
                'name' => $name,
            ));

Генерирует ошибку:

Warning (512): SQL Error: 1062: Duplicate entry 'GUID.....' for key 'unique_guid' [CORE/cake/libs/model/datasources/dbo_source.php, line 524]

Было бы замечательно иметь возможность установить какой-либо флаг или параметр, который говорит: "все равно"

Ответы [ 2 ]

7 голосов
/ 14 мая 2010

Это на самом деле не решение 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 не уникален, но будьте осторожны с такими вещами.

0 голосов
/ 14 мая 2010

Я не думаю, что в CakePHP есть такой простой флаг или опция, поскольку это предупреждение изначально генерируется MySql, а не самим тортом. Если вам не нужна уникальная функция на guid, вам нужно выполнить какой-то запрос на изменение индекса .Eg

$this->Model->query("ALTER TABLE `yourdatebasename`.`yourtablename` DROP INDEX `guid` ,ADD INDEX `guid` ( `guid` )"); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...