Já desejou realizar um UPDATE se existir uma linha do banco de dados, ou um INSERT se não existir com os mesmos dados? Acontece que a maioria dos motores SQL tem uma instrução MERGE ( MySQL , TSQL , Oracle ) que faz exatamente isso.
API de banco de dados do Drupal tem um invólucro em torno do instrução MERGE também , db_merge()
que vai cuidar das diferenças de sintaxe entre seus bancos de dados.
Por exemplo, se eu quisesse criar ou atualizar uma entrada na block
tabela (ou seja: atribuir um bloco a uma região em um tema), eu faria isso:
$query = db_merge('block')
->key(array(
'module' => 'system',
'delta' => 'powered-by',
'theme' => 'bartik',
))
->fields(array(
'status' => 1,
'weight' => 10,
'region' => 'footer',
'pages' => '',
'cache' => -1,
))
->execute();
A declaração acima seria equivalente a:
$exists_query = db_select('block')
->condition('module', 'system')
->condition('delta', 'powered-by')
->condition('theme', 'bartik')
->countQuery();
if ($exists_query > 0) {
db_update('block')
->fields(array(
'status' => 1,
'weight' => 10,
'region' => 'footer',
'pages' => '',
'cache' => -1,
))
->condition('module', 'system')
->condition('delta', 'powered-by')
->condition('theme', 'bartik')
->execute();
}
else {
db_insert('block')
->fields(array(
'module' => 'system',
'delta' => 'powered-by',
'theme' => 'bartik',
'status' => 1,
'weight' => 10,
'region' => 'footer',
'pages' => '',
'cache' => -1,
))
->execute();
}