2017-12-29 8 views
2

Ich bin neu in Laravel. Ich suche nach einer Möglichkeit, einen Wert zu einem bestimmten Feld wie created_at automatisch einzufügen, wann immer die Zeile in die DB-Tabelle eingefügt wird.Wie füge ich einen Wert in created_at Feld mit Abfrage-Generator

Ich fand heraus, dass nur Eloquent Weg, der some Model->save() Zeitstempel zum gewünschten Feld einfügt.

Aber ich möchte in der Lage sein, einen Wert einzufügen, auch wenn ich QueryBuilder benutze. Gibt es einen Weg dazu?

Ich habe in diesem Beitrag sah: Query builder not inserting timestamps

Jede Beratung geschätzt würde.

Vielen Dank im Voraus

+0

Was möchten Sie sparen? – Maraboc

+0

Warum richten Sie nicht stattdessen einen Trigger in der Datenbank ein? –

Antwort

1

Sie haben said before Sie Model::insertGetId() verwenden, aber die Sache ist diese Methode nicht mit Eloquent ist. Es ist eine Abfrage-Generator-Methode. So verwenden create() statt:

$object = Model::create($data); 
$id = $object->id; 

Wenn Sie noch insertGetId() verwenden möchten, müssen Sie created_at Zeitstempel manuell hinzuzufügen:

$data['created_at'] = now(); 
Model::insertGetId($data); 

Oder Sie CURRENT_TIMESTAMP als Standard für Zeitstempel Spalte könnte, aber es ist so viel besser, Eloquent nur dafür zu verwenden.

+0

$ data ['created_at'] = now(); – Vladimir

+0

@ J.Litvak danke, behoben. –

+0

Bitte erläutern Sie den Downvote. –

-1

Sie können einen neuen Hilfsmethoden in helpers.php So etwas machen werden lösen:

public function queryBuilderInsert($table, $data, $deleted_at = false) 
    { 
     $data['created_at'] = \Carbon::now(); 
     $data['updated_at'] = \Carbon::now(); 
     $deleted_at ? $data['deleted_at'] = null :; 

     \DB::table($table)->insert($data); 
    } 
public function queryBuilderUpdate($builder, $data) 
    { 
     $data['updated_at'] = \Carbon::now(); 
     $builder->update($data); 
    } 

Und dann können Sie Ihre Abfragen erstellen wie dies:

Für insert Verwendung queryBuilderInsert Methode

$example_data = [ 
    'name' => 'Name', 
    'email'=> 'Email' 
]; 
queryBuilderInsert('users',$example_data); 

Wenn Sie weiche Löschungen auf dem Tisch verwenden können Sie den dritten Parameter von queryBuilderInsert

queryBuilderInsert('users',$example_data, true); 

Für update verwenden, können Sie Ihre Anfrage stellen und rufen dann queryBuilderUpdate Methode

$example_update_data = [ 
    'name' => 'Name', 
    'email'=> 'Email' 
]; 
$builder = \DB::table('users')->where('id',1); 
queryBuilderUpdate($builder,$example_update_data); 

Es wird gesetzt updated_at datum und make update

Verwandte Themen