2011-09-24 12 views

Respuesta

9

Eche un vistazo a la función db_merge(), creo que tiene las características que está buscando.

1

Si realmente no sabe si ya hay un registro, probablemente necesite verificarlo un poco antes en el flujo de su programa. Normalmente comenzaría la función o lo que sea con una llamada al DB y si no obtengo un objeto de registro existente, hago uno nuevo desde stdClass.

Esto tiene dos ventajas: en primer lugar, significa que usted conoce los datos existentes, por lo que puede usarlos si es necesario y no sobrescribirlos a ciegas. Segundo: cuando llega al punto donde escribe en la base de datos, sabe si es INSERTAR o ACTUALIZAR en función de si el objeto tiene una propiedad de identificación.

+0

que cada vez que genero registro con dos claves primarias (nadie incremento automático), por lo que no puedo comprobar registro sin prueba en en dB. Creo que la manera más fácil es primero tratar de borrar el registro e insertar. Pero me temo sobre la sobrecarga de la tabla ... – neworld

+0

¿Te refieres a una clave compuesta? Esto no hará una diferencia en el método que describí. Simplemente haga un SELECCIONAR * con esa combinación de campos en una cláusula WHERE y vea qué devuelve. ¿Hay otros campos en la tabla aparte de los que está utilizando para la clave (es decir, esta es una tabla de unión muchos a muchos)? –

+0

Tengo una consulta simple. Así que escribo la función universal, porque la necesito a menudo. – neworld

1

función que implementa mismo:

function drupal_write_record2($table, $data, $primaryKeys) { 
    $data = (array)$data; 

    $query = db_select($table) 
     ->fields($table); 

    if (is_array($primaryKeys)) 
     foreach ($primaryKeys as $key) 
     $query->condition($key, $data[$key]); 
    else 
     $query->condition($primaryKeys, $data[$primaryKeys]); 

    $update = (bool)$query->execute()->fetchAssoc(); 

    if ($update) 
     return drupal_write_record($table, $data, $primaryKeys); 
    else 
     return drupal_write_record($table, $data); 
} 
Cuestiones relacionadas