2016-08-27 3 views
2

Dieser Beitrag ist zu sortieren und eine Frage zu stellen. Hallo alle, Ich entwickle ein großes System, das Trigger zu einem guten Zweck bringt. Wir betreiben derzeit die Server-Seite auf Laravel 5.2 mit PHP 7 mit phpmyadmin. In Laravel gibt es nicht wirklich fundierte Dokumentation darüber, wie man einen Auslöser durch Migrationen benutzt und aus dem, was ich entdeckt habe, muss man es meistens "roh" machen.Laravel 5.x Datenbank Trigger und mögliche Best Practices

Unten finden Sie ein einfaches Beispiel, das ich kenne, wie ein Auslöser in einer Migration schreiben:

class CreateAccountTriggerTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     DB::unprepared(' 
      CREATE TRIGGER `my_trigger_name` AFTER INSERT ON `table_the_change_happened` 
      FOR EACH ROW 

      BEGIN 

      INSERT INTO `this_table` 
        (field1,field2,field3) 
      VALUES 
        ('value1','value2','value3') 

      END 
     '); 
    } 

    /** 
     * Reverse the migrations. 
     * 
     * @return void 
     */ 
    public function down() { 
      DB::unprepared('DROP TRIGGER IF EXISTS `my_trigger_name`'); 
    } 
} 

Die Frage: jemand eine saubere Art und Weise kennt Variablen innerhalb Laravel zu gebrauchen Abfrage Ersteller?

Die Methode DB :: unparpared() ermöglicht es Ihnen nicht, gebundene Elemente anzuhängen. Es in Eloquent zu versuchen ist fast unmöglich, da es keine solide Dokumentation gibt, die ich für dieses Problem gefunden habe. Wenn jemand das näher ausführen könnte, würde ich es sehr schätzen. Vielen Dank im Voraus

aktualisieren Per hier Anfrage ein Beispiel wäre, was ich meine, indem Sie eine Variable innerhalb Laravel des Query Builder mit:

  $stuff = bcrypt($random_numbers); 
      DB::unprepared(' 
      CREATE TRIGGER `my_trigger_name` AFTER INSERT ON `table_the_change_happened` 
      FOR EACH ROW 

      BEGIN 

      INSERT INTO `this_table` 
        (field1,field2,field3) 
      VALUES 
        ('value1','value2','value3',"$stuff") 

      END 
     '); 
+0

Können Sie ein Beispiel dafür geben, was Sie unter "Variablen in Laravels Abfragegenerator verwenden" verstehen? – patricus

+0

@patricus Sicher Sache! Bitte beachten Sie die aktualisierten Änderungen –

+0

Dies ist eine der Anwendungen, die Laravel 'Model Events' hat. Sie brauchen dazu keinen Trigger, wenn Sie ein Modell einfach an 'table_the_change_happened' und dann an die 'public function boot() {parent :: boot(); }); 'Sie können einfach Ihre Logik hinzufügen, um den Einfügevorgang nach dem' parent :: boot() ' – Ohgodwhy

Antwort

2

Wenn ich Ihre Frage bin Missverständnis, ich glaube, Sie bin auf der Suche nach der statement() Methode, anstatt der unprepared() Methode. Die Methode statement() verwendet eine Abfrage und ein Array von Parameterbindungen für diese Abfrage.

Beispiel unten. Die ? in der Werteliste ist der Abfrageparameter. Der Wert, der an diesen Parameter gebunden wird, wird zu einem Array hinzugefügt, das im zweiten Parameter an die Methode statement() übergeben wird.

$stuff = bcrypt($random_numbers); 
DB::statement(' 
     CREATE TRIGGER `my_trigger_name` AFTER INSERT ON `table_the_change_happened` 
     FOR EACH ROW 

     BEGIN 

     INSERT INTO `this_table` 
      (field1,field2,field3) 
     VALUES 
      ('value1','value2','value3',?) 

     END 
    ', [$stuff]); 
+0

Ich fühle mich wie es ist nahe, aber die Anweisung Methode verhindert, dass der Auslöser vollständig erstellt wird. Ich denke, es liegt daran, dass irgendwann etwas getan werden muss. –

+0

Ich habe Ihnen +1 gegeben, weil es mich in die richtige Richtung gebracht hat. Ich danke dir, dass du geholfen hast, in die richtige Richtung zu gehen! Unten ist meine Antwort. –