2016-08-27 1 views
2

Это сообщение должно сортировать и задавать вопрос. Привет всем, Я разрабатываю большую систему, которая эффективно использует триггеры. В настоящее время мы запускаем серверную часть на Laravel 5.2 с php 7, используя phpmyadmin. В Laravel нет достоверной документации о том, как использовать триггер через миграции, и из того, что я обнаружил, вам в основном нужно сделать это «сырой».Laravel 5.x База данных Триггеры и возможные передовые методы

Ниже приведен простой пример, который я знаю, о том, как написать триггер в миграции:

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`'); 
    } 
} 

Вопрос: Кто-нибудь знает чистый способ, чтобы использовать переменные в Laravel-х построитель запросов?

Метод DB :: unprepared() не позволяет прикреплять связанные элементы к нему. Попытка этого в Eloquent почти невозможна, поскольку нет твердой документации, которую я нашел для этой проблемы. Если кто-нибудь сможет это объяснить, я бы очень признателен. Спасибо заранее

Обновление По желанию здесь будет примером того, что я имею в виду, используя переменный в построителе запросов Laravel в:

  $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

Можете ли вы привести пример того, что вы подразумеваете под «использованием переменных в построителе запросов laravel»? – patricus

+0

@patricus Обязательно! см. обновленные изменения –

+0

Это одно из приложений, которое имеет «Моделирование событий» Laravel. Нет необходимости в триггере, чтобы сделать это, когда вы можете просто присоединить модель к 'table_the_change_happened', а затем в' public function boot() {parent :: boot(); }); вы можете просто добавить свою логику, чтобы сделать вставку после 'parent :: boot()' – Ohgodwhy

ответ

2

Если я не буду недопониманием вашего вопроса, я думаю, что вы '' ищет метод statement(), а не метод unprepared(). Метод statement() принимает запрос и массив привязок параметров для этого запроса.

Пример ниже. ? в списке значений - это параметр запроса. Значение для привязки к этому параметру добавляется к массиву, переданному во втором параметре, к методу statement().

$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

Я чувствую, что он близок, но метод выражения предотвращает создание триггера целиком. Я думаю, это потому, что в какой-то момент нужно действовать. –

+0

Я дал вам +1, потому что он заставил меня двигаться в правильном направлении. Я благодарю вас за помощь в правильном направлении! Ниже мой ответ. –

Смежные вопросы