db_merge Drupal 7

Опубликовано 2012.02.28

В Drupal 7 DataBase API есть замечательная функция-db_merge. Используя её можно легко вставить строку, или сделать update строки. Суть её работы заключается в том,что она ищет строку по заданному условию. И если находит-выполняет update, а если нет-то insert. Разберем её на примере. Допустим имеем таблицу 'peoples', в которой хранится список сотрудников. И нам нужно сотруднику с именем Jonson установить поле money на 10. А если этого сотрудника нет-завести его.
  1. db_merge('peoples')
  2. ->key(array('name' => 'Jonson'))
  3. ->fields(array( //отработается при insert
  4. 'name' => 'Jonson',
  5. 'money' => 10,
  6. ))
  7. ->updateFields(array( //сработает для update
  8. 'money' => 10,
  9. ))
  10. ->execute();
Как видите-ничего сложного. В противном случае пришлось бы делать 1 запрос, чтобы узнать-существует строка с именем Jonson или нет.И потом написать ещё 2 запроса-на вставку и апдейт строки,и запускать один из них, опираясь на результат первого запроса. Краткость - сестра таланта)