sql >> データベース >  >> RDS >> Mysql

移行時に生のSQLを実行する

    問題は(@postashinが言ったように)バックティックでした。

    Laravel 5(Laravel 4についてはよくわかりません)の時点で、これを行うことができたはずです:

    DB::statement('ALTER TABLE `users` MODIFY `age` DATETIME');
    

    実際、バックティックはエスケープする必要がないため、バックティックも必要ありませんでした。だからあなたはちょうど書いたかもしれません:

    DB::statement('ALTER TABLE users MODIFY age DATETIME');
    

    データベースステートメントを実行しているだけの場合も、クロージャでこれは必要ありません。

    ただし、実行していることに対するより良いアプローチは次のとおりです。

    Schema::table('users', function(Blueprint $table) {
        $table->dateTime('age')->change();
    });
    

    最後の解決策では、Doctrineのバグが原因でエラーが発生する場合があることに注意してください。これは通常、テーブルに列挙型がある場合に発生します(変更する列だけではありません)。

    詳細については、Laravelデータベースの移行-列の変更 を参照してください。



    1. OracleにおけるSQLインジェクションの脆弱性とその防止を実証する例

    2. データのダンプ中の外部キーの制約

    3. MySQLで部分文字列を抽出する方法

    4. 5.1.32でTRIGGER特権を持つMySQLトリガーを作成できません