I have a Laravel project that already has a database with an SQL script and I'm trying to put the MySQL script in a migration to use Eloquent instead. My database has triggers that uses DELIMITER $$
and according to this question, it looks like I can't use DELIMITER $$
in my script because it's a MySQL client command and MySQL PDO doesn't have access to it with PHP.
Is there a way to avoid DELIMITER $$
but still have conditions in a MySQL trigger to make it usable by Laravel database migration?
migration.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()
{
}
}
sample trigger:
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 ;