2016-05-06 6 views
1

Ich habe Drupal 7 Seite mit einer Tabelle events_times. Ich muss überprüfen, ob einer der Datensätze in der Datenbank vorhanden ist. Wenn sie das tun, möchte ich ein Update machen und kein Einfügen. Ich habe mit dem Code herumgebastelt, kann es aber nicht funktionieren. Ich erhalte die folgende Fehlermeldung:Drupal 7 db_update mit foreach Schleife

Fatal error: Call to undefined method UpdateQuery::values() 

Hier ist mein Code:

$times_values= array(); 

foreach ($form_state['values']['times_fieldset']['registration_times'] as $time) { 
$times_values[] = array('event_id' => $eventId, 
'registration_times' => $time, 
'max_attendees' => 0 
); 
} 
//Check to see if values exist in the table already 
$exists = db_select('events_times','et') 
->fields('et') 
->condition('event_id',$event->id,'=') 
->execute() 
->fetchAll(); 

if ($exists == FALSE) { 
$query = db_insert('events_times')->fields(array('event_id', 'registration_times', 'max_attendees')); 
foreach ($times_values as $record) { 
$query->values($record); 
} 
$query->execute(); 
} 
else { 
$query = db_update('events_times')->fields(array('event_id', 'registration_times', 'max_attendees')); 
foreach ($times_values as $record) { 
$query->values($record); 
} 
$query->execute(); 
} 

Antwort

1

Drupals db_update() und db_insert() verwenden, um die fields() Methode zu definieren, wo Ihre Werte sollten am Ende. Um mehrere Objekte zu unterstützen, fügen Sie das Objekt ein und akzeptieren Sie auch Werte über die Methode values().

$query->fields(array(
    'registration_times' => $values['registration_times'], 
); 
+0

Das wird in meinem $ times_values ​​= array() gesetzt; Block? Einfügen arbeitete vor dem Hinzufügen des Aufrufs zu überprüfen, db und db_update Anweisungen – Johanna

+0

Ich sollte klarstellen, dass das Feld registration_times ist ein Ajax hinzufügen/entfernen Formularobjekt, so dass es mehrere Datensätze gleichzeitig in der db eingefügt. – Johanna

+0

Sie haben Recht, Einfügen akzeptiert auch Werte() als Methodenaufruf (Antwort aktualisiert). Aber das Update-Objekt hat keine Werte-Methode (siehe: https://api.drupal.org/api/drupal/includes!database!query.inc/class/UpdateQuery/7.x), also müssen Sie ersetzen die Felder in der Schleife (Sie müssen möglicherweise auch das Abfrageobjekt ersetzen Ich habe vor kurzem einen Update-Aufruf in einer Schleife versucht. – acrosman