Intereting Posts
Надежные хэш-пароли – так много противоречивых советов! Как отображать специальные символы в PHP Забыли пароль? Скрипт PHP mysqli JWT API с Laravel, не может читать заголовок обновления токена на клиенте Параметрированные запросы PHP / MySQL Тип PHPDoc намекает на массив объектов? Передача значений для просмотра в Zend Framework 2 Пользовательское поле пользователя в WordPress (скрыто от пользователя) WooCommerce: настраиваемая функция для управления запасами переменных продуктов на уровне отдельных атрибутов Перекрывающая ассоциация сущностей, вызывающая ошибки внешнего ключа базы данных при удалении объекта PHP session.cookie_secure: отключает сеансы, когда установлено значение true PHP Xpath: получить все значения href, содержащие иглу Чтобы быть похожим на Codeigniter и получить этот вид частично с ванильным PHP? CodeIgniter – загрузка нескольких файлов одним вводом Предупреждение: openssl_pkcs7_sign () : ошибка получения секретного ключа в C: \ xampp \ htdocs \ this \ tcpdf \ tcpdf.php в строке 8366

Создание связей HABTM в CakePHP

У меня две модели, называемые Book и Tag, которые находятся в отношениях HABTM. Я хочу, чтобы пара (книга, тег) была сохранена только один раз. В моих моделях у меня есть

var $hasAndBelongsToMany = array( 'Tag' => array( 'className' => 'Tag', 'joinTable' => 'books_tags', 'foreignKey' => 'book_id', 'associationForeignKey' => 'tag_id', 'unique' => true ) ); 

и наоборот, но флажок Unique не помогает мне; Я все еще могу сэкономить вдвое больше одной пары.

Как это сделать в CakePHP? Должен ли я объявлять пару (книгу, тег) уникальной в базе данных напрямую, или это заставит CakePHP сходить с ума? Есть ли способ Cakey справиться с этой ситуацией?

EDIT: Я попытался сделать пару уникальной с запросом (я использую MySQL)

 ALTER TABLE books_tags ADD UNIQUE (book_id,tag_id); 

но это не работает. Когда я сохраняю несколько тегов за раз, все идет хорошо, если все пары новы. Если хотя бы одна из пар повторяется, CakePHP не выполняет всю операцию, поэтому не сохраняет ни одну новую пару (даже не хорошие).