У меня есть проект Laravel, в котором уже есть база данных со скриптом SQL, и я пытаюсь поместить скрипт MySQL в миграцию, чтобы вместо этого использовать Eloquent. В моей базе данных есть триггеры, которые используют DELIMITER $$
, и, согласно этому вопросу, это похоже, я не могу использовать DELIMITER $$
в своем скрипте, потому что это клиентская команда MySQL, а MySQL PDO не имеет к ней доступа с PHP.
Есть ли способ избежать DELIMITER $$
, но при этом сохранить условия в триггере MySQL, чтобы его можно было использовать при миграции базы данных Laravel?
миграция.php:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Log;
class RunInitScriptSql extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
$sql_dump = File::get(base_path("database/billing_system_stable.sql"));
$sql_dump_insert = File::get(base_path("database/billing_system_insertions.sql"));
$sql_dump_trigger = File::get(base_path("/database/billing_system_triggers.sql"));
DB::connection('mysql')->getPdo()->exec("CREATE DATABASE IF NOT EXISTS billing_system;");
DB::connection('mysql')->getPdo()->exec(
$sql_dump .
$sql_dump_insert .
$sql_dump_trigger
);
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
}
}
образец триггера:
DROP TRIGGER IF EXISTS before_update_typesoumission;
DELIMITER $$
CREATE TRIGGER before_update_typesoumission
BEFORE UPDATE
ON typesoumission
FOR EACH ROW
IF NEW.typeSoumission = 'Résidentiel'
THEN
SET NEW.ratio = 1;
ELSE
SET NEW.ratio =
NEW.tauxHoraire / (SELECT tauxHoraire
FROM typesoumission
WHERE typeSoumission = 'Résidentiel');
END IF;
$$
DELIMITER ;