Используя Propel, я могу сохранить объект, используя
$user = new User;
$user->setName('Test');
$user->save();
$user->getId()
будет содержать идентификатор вставленного объекта. Но это будет работать, только если я использую автоинкрементные значения идентификаторов.
Есть ли способ заставить это работать, когда идентификаторы генерируются функцией?
Я могу добавить RETURNING id
до конца запросов вставки вернуть идентификатор, но я не уверен, смогу ли я вернуть эти данные обратно в объект пользователя Propel.
Вы должны быть в состоянии получить недостающие (созданные извне) значения, вызвав reload()
на объекте, который вы хотите увлажнить.
//hydrates fields by database values
$user->reload();
//should return the postgresql-generated-value
$user->getId();
редактировать: опечатки
Если у вас есть функция или триггер в MySQL, который автоматически создает для вас идентификатор при каждой вставке, вам нужно сохранить это сгенерированное значение для каждого сеанса / соединения. Например, используя last_insert_id(new_id)
, так что вы можете получить это значение, используя SELECT last_insert_id();
через текущее соединение в PHP. Нет другого логического способа извлечения таких сгенерированных идентификаторов по функциям / триггерам.