3

这篇文章是为了通知和提问。大家好,我正在开发一个可以很好地使用触发器的大型系统。我们目前使用 phpmyadmin 在 Laravel 5.2 和 php 7 上运行服务器端。在 Laravel 中,并没有关于如何通过迁移使用触发器的可靠文档,而且我发现您大多必须“原始”地进行操作。

下面是一个我知道的关于如何在迁移中编写触发器的简单示例:

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
         ');
4

1 回答 1

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]);
于 2016-08-27T06:53:21.550 回答