Получить идентификатор вставленной строки с помощью Propel ORM, если не используются автоинкрементные идентификаторы

Используя Propel, я могу сохранить объект, используя

$user = new User;
$user->setName('Test');
$user->save();

$user->getId() будет содержать идентификатор вставленного объекта. Но это будет работать, только если я использую автоинкрементные значения идентификаторов.

Есть ли способ заставить это работать, когда идентификаторы генерируются функцией?

Я могу добавить RETURNING id до конца запросов вставки вернуть идентификатор, но я не уверен, смогу ли я вернуть эти данные обратно в объект пользователя Propel.

2

Решение

Вы должны быть в состоянии получить недостающие (созданные извне) значения, вызвав reload() на объекте, который вы хотите увлажнить.

//hydrates fields by database values
$user->reload();
//should return the postgresql-generated-value
$user->getId();

редактировать: опечатки

3

Другие решения

Если у вас есть функция или триггер в MySQL, который автоматически создает для вас идентификатор при каждой вставке, вам нужно сохранить это сгенерированное значение для каждого сеанса / соединения. Например, используя last_insert_id(new_id), так что вы можете получить это значение, используя SELECT last_insert_id(); через текущее соединение в PHP. Нет другого логического способа извлечения таких сгенерированных идентификаторов по функциям / триггерам.

0

По вопросам рекламы [email protected]