如何解决触发时的迁移错误?

时间:2019-06-14 17:55:20

标签: mysql laravel-5

我想触发一个。创建php make:migration AddTrigger并在cmd中编写php artisan migrate时编写代码后,出现以下错误:

  

Symfony \ Component \ Debug \ Exception \ FatalThrowableError:语法错误,   E:\ laravel项目中出现意外的“接收者”(T_STRING),期望为“)”   文件夹\血液\数据库\迁移\ 2019_06_14_173818_add_trigger.php:16

  12|      * @return void
  13|      */
  14|     public function up()
  15|     {
> 16|          DB::unprepared('CREATE TRIGGER amount AFTER INSERT ON 'receiver' FOR EACH ROW
  17|                 BEGIN
  18|                    INSERT INTO 'receipt' ('r_id') VALUES (10);
  19|                 END');
  20|     }

异常跟踪:

  

1 Illuminate \ Filesystem \ Filesystem :: requireOnce(“ E:\ laravel   项目   folder \ blood \ database \ migrations / 2019_06_14_173818_add_trigger.php“)         E:\ laravel项目文件夹\血液\供应商\ laravel \ framework \ src \ Illuminate \ Database \ Migrations \ Migrator.php:475

     

2 Illuminate \ Database \ Migrations \ Migrator :: requireFiles()         E:\ laravel项目文件夹\ blood \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Migrations \ Migrator.php:105

     

请使用参数-v查看更多详细信息。

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddTrigger extends Migration
{
/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
     DB::unprepared('CREATE TRIGGER amount AFTER INSERT ON 'receiver' FOR 
EACH ROW
            BEGIN
               INSERT INTO 'receipt' ('r_id') VALUES (10);
            END');
}

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

我使用了一个名为PageController的控制器,在其中我使用了该函数插入接收器。

1 个答案:

答案 0 :(得分:0)

  1. 您忘记添加数据库外观,将use Illuminate\Support\Facades\DB;添加到文件中。

  2. 使用DB::raw函数执行原始查询,并使用双引号进行查询。

    DB::unprepared(DB::raw("CREATE TRIGGER amount AFTER INSERT ON 'receiver' FOR EACH ROW
                BEGIN
                   INSERT INTO 'receipt' ('r_id') VALUES (10);
                END"));