마이그레이션 시 원시 SQL 실행
어떤 구문을 사용해도 올바르게 쓸 수 없습니다.
Schema::table('users', function(Blueprint $table){
$sql = <<<SQL
ALTER TABLE 'users' MODIFY 'age' DATETIME
SQL;
DB::connection()->getPdo()->exec($sql);
});
로도 시도되었다
DB::statement('ALTER TABLE \'users\' MODIFY COLUMN DATETIME);
큰따옴표 등입니다.마이그레이션을 실행하면 항상 다음과 같은 메시지가 나타납니다.
구문 오류 또는 액세스 위반: 1064 SQL 구문에 오류가 있습니다.확인해 주세요.
MariaDB 서버 버전에 해당하는 설명서에서 "users" MODIFY 'age' DATETIME 근처의 올바른 구문을 사용합니다.
네, 확인했습니다.MariaDB는 MySQL 구문을 사용합니다(적어도 이 경우).
(@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();
});
마지막 솔루션은 보통 테이블에 열거형이 있는 경우(변경 중인 열뿐만 아니라) 발생하는 Acrin의 버그로 인해 오류가 발생할 수 있습니다.
자세한 내용은 Larabel 데이터베이스 마이그레이션 - 열 수정을 참조하십시오.
MySQL에서 식별자를 이스케이프하려면 작은 따옴표 대신 back-ticks를 사용합니다.
alter table `users` modify `age` datetime
이 경우 이스케이프를 생략할 수 있습니다.
alter table users modify age datetime
아래와 같이 사용하실 수 있습니다.
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateTestTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
DB::statement('ALTER TABLE `users` MODIFY `age` DATETIME');
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users'); \or whatever you want on rollback
}
}
또한 raw sql 쿼리 이행(phMyAdmin 또는 툴을 사용하여 작성된 쿼리는 개발자 간의 이행 관리)을 관리하는 패키지도 작성했습니다.
https://readerstacks.com/how-to-run-raw-sql-query-in-migration-laravel/ 를 참조해 주세요.
언급URL : https://stackoverflow.com/questions/28787293/run-raw-sql-in-migration
'source' 카테고리의 다른 글
Python에서 상호 또는 순환(순환) 가져오기를 사용하면 어떻게 됩니까? (0) | 2022.09.12 |
---|---|
컬렉션의 이유정렬은 빠른 정렬 대신 병합 정렬을 사용합니까? (0) | 2022.09.12 |
PHP CURL에서 POST에서 GET으로 전환하는 방법 (0) | 2022.09.11 |
mod_rewrite가 php에서 활성화 되어 있는지 확인하는 방법 (0) | 2022.09.11 |
MIN() 함수를 사용한 MySQL의 잘못된 결과 (0) | 2022.09.11 |