2016-04-22 8 views
0

Unsere Firma erstellt (sehr aktive) Registrierungsformulare. Die Anwendung, die diese Daten verarbeitet, ist eine Laravel 5-Anwendung. Ich versuche, alle unnötigen Abfragen im Registrierungsverarbeitungsskript zu beseitigen. Aber beachten Sie, dass es noch entscheidender ist, die wir jede Registrierung richtig aufzeichnen.

Im Moment habe ich dies in den Anwendungsfluss:

$entry_timestamp = time(); 

DB::table('form_registration_data')->insert($userDataArray); 

$matchArray = array('last_name' => $last_name, 'entry_timestamp' => $entry_timestamp);// the (required field last_name/unix entry_timestamp) pair is (safely IMO) assumed to be a unique "ID" 

$sql = DB::table('form_registration_data')->select('entry_id')->where($matchArray)->first(); 

if (!empty($sql)) { 
    //from this point script knows user data was recorded properly 
} else { 
    $errorMsg = 'There was a problem with the server. Please try again."; 
} 

Der Grund schrieb ich eine separate Auswahlabfrage ist, ich bin nicht 100% sicher, dass nur, weil der Einsatz Abfrage versäumte nicht, bedeutet dies, sie ordnungsgemäß ausgeführt wird und die Daten korrekt in der DB (denken sie daran, dies ist der wichtigste Aspekt) aufgezeichnet

mit anderen Worten, ist der Grund, warum ich nicht das Skript wie folgt geschrieben hat:

$sql = DB::table('form_registration_data')->insert($userDataArray); 

if ($sql) { 
    //was the data truly recorded properly - 100% guaranteed ??? 
} else { 
    $errorMsg = 'There was a problem with the server. Please try again."; 
} 

Habe ich das zu weit genommen? Mit anderen Worten, fragt das Nicht-Versagen der Einfügung GARANTIE ab, dass die richtigen Daten in der DB aufgezeichnet wurden?

+1

Warum nicht versuchen, es basiert Holen auf 'LAST_INSERT_ID()' und sehen, ob es da drin ist sicher zu sein? Wenn es nicht fehlgeschlagen ist, ist es wahrscheinlich gelungen, aber es gibt keine Garantie, dass etwas anderes es nicht gelöscht hat oder es in der Zukunft nicht löschen wird. Die Programmierung ist voller Unsicherheit. – tadman

+0

Vereinbar, wenn Sie ORM verwenden und dieser Variable die zu speichernden Werte zuweisen. Sie können die $ data-> ID verwenden, um nach dem Speichervorgang zu suchen. Wenn id nicht da ist, hat es nicht gespeichert. – arcee123

+0

@tadman True - aber die Frage konzentriert sich auf den Zeitpunkt der Skriptausführung - nicht auf Löschungen in der Zukunft. Kein anderer Teil dieses Skripts verfügt über eine Löschfunktionalität –

Antwort

0

Dies wird funktionieren. Sie können auch $ Daten-> id zu referenzieren verknüpften Tabellen als Fremdschlüssel Einfügen verwenden:

// In your models file, this will set table. 
class Registration extends Model { 

    protected $FIELD1; 
    protected $FIELD2; 
    protected $FIELD3; 
    protected $FIELD4; 
    protected $FIELD5; 
    protected $FIELD6; 
    protected $FIELD7; 
} 


//In your controller: 

$data = new Registration(); 

$data->FIELD1 = VALUE1; 
$data->FIELD2 = VALUE2; 
$data->FIELD3 = VALUE3; 
$data->FIELD4 = VALUE4; 
$data->FIELD5 = VALUE5; 
$data->FIELD6 = VALUE6; 

if($data->save()) { 
    echo 'ID: ' & $data->id & ' Saved.' 
} 
+0

Vielen Dank für Ihre Antwort. Die Anzahl der Felder kann je nach Anmeldeformular stark variieren und kann jederzeit vom Autor des Formulars geändert werden. Auch die Leistung spielt eine Rolle, und es ist nicht etwas, was ich tun möchte, wenn ich riesigen Tabellen beifüge, um Fremdschlüssel zu prüfen. Sehen Sie meinen letzten Kommentar für IMO eine einfachere "Mittelweg" -Ansatz –

+1

ok. Schau dir das mal an: http://laravel.io/forum/04-30-2014-saving-dynamicallycreated-form-field-array-to-db-laravel-way – arcee123