Drupal 7 DBTNG: как получить последний идентификатор INSERT при использовании db_merge () - PullRequest
0 голосов
/ 28 июля 2011

При использовании db_merge не представляется возможным получить последний идентификатор вставки, если была сделана INSERT.

MergeQuery :: execute () возвращает MergeQuery :: STATUS_INSERT, если была сделана вставка, а не идентификатор вставки, как это делает InsertQuery :: execute ().

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

Источники: http://api.drupal.org/api/drupal/includes--database--query.inc/function/MergeQuery%3A%3Aexecute/7 http://api.drupal.org/api/drupal/includes--database--query.inc/function/MergeQuery%3A%3Aexecute/7

1 Ответ

0 голосов
/ 29 июля 2011

Редактировать: Решено. modules / simpletest / tests / database_test.test содержит решение, в котором мы запрашиваем базу данных, используя известные значения для извлечения записи и извлечения ее идентификатора. Все еще кажется странным, что нет более простого способа получить последний идентификатор вставки, но это работает для моих целей.

$result = db_merge('test_people')
  ->key(array('job' => 'Presenter'))
  ->fields(array(
    'age' => 31,
    'name' => 'Tiffany',
  ))
  ->execute();
$person = db_query('SELECT * FROM {test_people} WHERE job = :job', array(':job' => 'Presenter'))->fetch();
$last_insert_id = $person->id; // Core test does not actually include an ID, but this is how it could work
...