Ich verwende Laravel und den Laravel-Migrationsmechanismus. Ich habe Tabellen erstellt und Fremdschlüssel eingerichtet. Aber die Tabellen sind MyISSAM, also werden keine Fremdschlüssel erstellt. Wo aktiviere/konfiguriere ich das? (um es auf InnoDB und nicht auf dem MySQL-Server zu ändern).
MySQL InnoDB-Engine in Laravel
DigitalWM
Sie können Ihre Datei /config/database.php bearbeiten, nach suchen MySQL Eintrag und Änderung:
'engine' => null,
zu
'engine' => 'InnoDB',
Das erspart Ihnen das Hinzufügen $table->engine = "InnoDB";
für jedes deiner Schemas 😉
-
Dies ist perfekt! Danke!
– Christoffer
19. November 2017 um 13:57 Uhr
-
Die Frage ist nun, warum Laravel erlaubt, Fremdschlüssel in den Migrationsdateien mit MyISAM zu erstellen. Unter Verwendung von MySQL 5.7 (also mit InnoDB als Standard) wird die
migrate
Der Befehl erstellt immer noch eine Tabelle mit MyISAM, und meine Fremdschlüssel sind nur Indizes. Seltsam.– Vinzenz Decaux
4. August 2018 um 10:44 Uhr
-
@VincentDecaux, Laravel hat allen Entwicklern die Funktionalität gegeben, die Fremdschlüssel per Migrationscode zu erstellen. Angenommen, Laravel erlaubt diese Funktionalität nicht und jemand, der die InnoDB-Engine verwendet, benötigt sie, dann muss er offensichtlich die Abfrage(n) separat schreiben, um Fremdschlüsseleinschränkungen hinzuzufügen. Was im Ergebnis auch seine/ihre Arbeit und Zeit verdoppeln wird.
– Herr Singh
11. Oktober 2019 um 7:25 Uhr
Motor so definieren
Schema::create("models", function(Blueprint $table) {
$table->engine = "InnoDB";
}
Kryoknochen
Sie können den Motor hineinstellen Schema\Tabellenabschluss.
-
Leider scheint dieser Link jetzt tot zu sein.
– jlbang
17. Juli 2015 um 20:53 Uhr
-
Jetzt ist der Weg, dies zu tun hier in Verbindungs- und Speicher-Engine
– Thomas Laurent
23. Juni 2016 um 15:18 Uhr
Ich fand, dass @ThomasLAURENT die beste Lösung ist, aber was ist mit den vorhandenen Tabellen, die ich in meiner Datenbank habe.
Herumarbeiten.
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class ConvertTablesIntoInnoDB extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
$tables = [
'users',
'products',
];
foreach ($tables as $table) {
DB::statement('ALTER TABLE ' . $table . ' ENGINE = InnoDB');
}
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
$tables = [
'users',
'products',
];
foreach ($tables as $table) {
DB::statement('ALTER TABLE ' . $table . ' ENGINE = MyISAM');
}
}
}
Dadurch können wir alle Tabellen konvertieren und bei Bedarf zurücksetzen.
Tiago Gouvêa
Ein anderer Ansatz (für wen dies nicht database.php verwendet) besteht darin, on einzuschließen .env
Datei:
DB_ENGINE=InnoDB
Denken Sie daran, zu überprüfen, ob Sie haben 'engine' => env('DB_ENGINE', null),
auf Ihrer database.php
Pradeep
Ich würde empfehlen, Ihr MySQL auf 5.5 oder höher zu aktualisieren. Die standardmäßige Speicher-Engine für Mysql ist jetzt InoDB
Vor MySQL 5.5.5 war MyISAM die Standardspeicher-Engine. (Die Standardeinstellung wurde in MySQL 5.5.5 auf InnoDB geändert.) MyISAM basiert auf der älteren (und nicht mehr verfügbaren) ISAM-Speicher-Engine, hat aber viele nützliche Erweiterungen.
http://dev.mysql.com/doc/refman/5.5/en/myisam-storage-engine.html
Ist dies erledigt, können Sie Beziehungen innerhalb der Entitätsklassen einfach über Laravel abbilden
RDK
Verwenden Sie InnoDb-Tabellen auf der Serverseite, das ist der beste Weg zum Erfolg. Benutzen MySQL-Workbench. Es ist einfach in der Workbench. Und wenn Sie wollen, lesen Sie den Eingeborenen Handbuch