Durante il processo di creazione dei file di migrazione della mia app, ho notato che Laravel non supporta i trigger di database! Sono venuto a patti con il fatto che ho bisogno di eseguire un'istruzione di query per ottenere questo risultato, ma che è anche dando mi turba .. Ecco un frammento di codice dalla mia app:Istruzione di database Laravel 4 creare trigger
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()');
quando corro artigianale migrazione mi dà il seguente errore:
[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 ( ))
Esistono soluzioni Oltre a creare il mio proprio oggetto PDO e l'esecuzione della query al di fuori di laravel? Questa è un'eccezione MySQL o un'eccezione di Laravel?
EDIT
A giudicare dalla deroga, è chiaro che le dichiarazioni preparate non supportano la creazione di trigger .. non so perché, ma mi piacerebbe una certa comprensione. Per aggirare questo ho appena eseguito la mia query 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()');
mentre la risposta che hai selezionato è semplice ed 'eloquente' non affronta un serio problema di integrità del database. Dovresti provare a racchiudere il codice del database in una transazione in modo che se qualcosa non va a buon fine, fallisce tutto. –
Hai avuto fortuna con questo? – laviku