#php #sql #symfony #doctrine
#php #sql #symfony #доктрина
Вопрос:
Сегодня я понял, что мне не хватает одного из моих объектов. Я сгенерировал метаданные XML, а затем сгенерировал объект. Я попытался восстановить объект, но мне все еще не удалось его успешно восстановить.
Этот объект имеет составной первичный ключ. И каждая часть этого ключа на самом деле является ключом foregin.
SQL:
CREATE TABLE lajki (
_wydarzenie_id INT NOT NULL,
_uzytkownik_id INT NOT NULL,
_lajk_data DATETIME NOT NULL,
PRIMARY KEY (_wydarzenie_id, _uzytkownik_id),
FOREIGN KEY (_uzytkownik_id) REFERENCES uzytkownicy(_uzytkownik_id),
FOREIGN KEY (_wydarzenie_id) REFERENCES wydarzenia(_wydarzenie_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;
Метаданные XML:
<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="Lajki" table="lajki">
<change-tracking-policy>DEFERRED_IMPLICIT</change-tracking-policy>
<id name="wydarzenieId" type="integer" column="_wydarzenie_id"/>
<id name="uzytkownikId" type="integer" column="_uzytkownik_id"/>
<field name="lajkData" type="datetime" column="_lajk_data"/>
<lifecycle-callbacks/>
</entity>
</doctrine-mapping>
Что мне нужно сделать, чтобы он работал? Должен ли я сам записывать объект или мне нужно просто что-то изменить?
Комментарии:
1. Что вы подразумеваете под «но мне все еще не удалось его успешно восстановить»? Как вы «восстанавливаете объект»?
Ответ №1:
Я предполагаю, что вы говорите об инструменте командной строки, который генерирует классы и прокси из аннотаций. В целом инструмент не очень хорош. У него много проблем с наследованием и, похоже, с составными (не двойными) ключами в вашем случае.
Попробуйте исправить аннотации в ваших классах сущностей вручную, не используйте инструмент. Если вы так сильно хотите его использовать, сгенерируйте все только в первый раз, исправьте ошибки, которые инструмент не может устранить, и забудьте о том, что этот инструмент когда-либо существовал 🙂
Кстати. хотя Doctrine поддерживает составные ключи, их использование не рекомендуется. Поэтому не используйте их, если они действительно не нужны. Смотрите документацию.