マイアプリのマイグレーションファイルの作成プロセス中に、Laravelがデータベーストリガーをサポートしていないことに気付きました!ここに..私は、私はこれを達成するために、クエリ文を実行する必要があるという事実を条件になってきたが、それはまた、私のトラブルを与えている私のアプリからのコードスニペットです:私は職人の移行を実行するとLaravel 4データベースステートメント作成トリガー
Schema::create('users', function ($table) {
$table->increments('id');
$table->string('uuid', 36);
$table->string('email', 255);
$table->string('password', 255);
});
DB::statement('CREATE TRIGGER users_trigger_uuid BEFORE INSERT ON users FOR EACH ROW SET NEW.uuid = UUID()');
[Exception]
SQLSTATE[HY000]: General error: 2030 This command is not supported in the prepared statement protocol yet (SQL: CREATE TRIGGER users_trigger_uuid BEFORE INSERT ON users FOR EACH ROW SET NEW.uuid = UUID()) (Bindings: array ( ))
私自身のPDOオブジェクトを作成してLaravel以外のクエリを実行する以外に解決策はありますか?これはMySQLの例外かLaravelの例外ですか?例外から判断
EDIT
は、それが準備された文が、なぜ..わからないトリガの作成をサポートしていませんが、いくつかの洞察を愛することは明らかです。これを回避するために、自分のPDOクエリを実行しました。
$default_driver = Config::get('database.default');
$connection_info = Config::get('database.connections.' . $default_driver);
$conn = new PDO('mysql:host=' . $connection_info['host'] . ';dbname=' . $connection_info['database'], $connection_info['username'], $connection_info['password']);
$conn->query('CREATE TRIGGER users_trigger_uuid BEFORE INSERT ON ' . $connection_info['prefix'] . 'users FOR EACH ROW SET NEW.uuid = UUID()');
あなたが選んだ答えはシンプルで「雄弁」ですが、深刻なデータベースの整合性の問題には対処しません。何かが失敗した場合、すべてが失敗するように、データベースコードをトランザクション内でラップしてください。 –
これで運が良かったですか? – laviku