TL; DR: Запрос работает из CLI MySQL, но НЕ из PHP, как если бы триггеры не запускались PHP.
У меня есть структура mySQL, которая выглядит следующим образом:
entity
- это «родительская» таблица с id
в качестве PK contact
- это «дочерняя» таблица с entity_id
в качестве PK и FK на entity
person
- это таблица «grand-child» с entity_id
в качестве PK и FK на contact
Я создал несколько триггеров, чтобы при вставке новой строки в contact
,сначала он вставляет новую строку в entity
и использует новый id
как entity_id
.То же самое для person
и contact
.Все триггеры сделаны на одной и той же модели, вот один:
DELIMITER #
DROP TRIGGER IF EXISTS contact_insert_trig;
CREATE TRIGGER contact_insert_trig BEFORE INSERT ON `contact`
FOR EACH ROW BEGIN
INSERT INTO entity (cat_id) values (1);
SET NEW.entity_id = (SELECT id FROM entity ORDER BY id DESC LIMIT 1);
SET NEW.entity_cat_id = 1;
END; #
Так, например, когда я вставляю новую строку в person
, первый триггер создает строку в contact
, которая, черезвторой триггер создает строку в entity
, все с совпадающими id
с.
Это работает в MySQL, но НЕ в PHP.Тот же запрос:
INSERT INTO person (first_name, last_name) VALUES ("Bob", "McIntosh")
работает в CLI mySQL (все строки созданы и совпадают), но не выполняется при вызове с mysqli->query()
в PHP7 с ошибкой:
Field 'entity_id' doesn't have a default value
Как я могу заставить его работать на PHP?Или мне нужно пройти через процесс создания всех родительских таблиц вручную?