Wie man SQLite arbeiten in Laravel
Wann immer ich laufen php artisan migrate
die folgende Fehlermeldung in der Konsole:
[PDOException]
SQLSTATE[HY000] [14] unable to open database file
Den Datenbank.sqlite Datei befindet sich bei Datenbank/. Ich bin mit Windows 10, Laravel 5.2. Hier ist .env config-Datei:
.env:
DB_CONNECTION=sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=homestead
DB_PASSWORD=secret
Ich habe überall gesucht, aber konnte Sie nicht finden, was diesen Fehler verursacht und wie es zu lösen.
Update
Schaffte ich Migrationen erfolgreich ausgeführt durch den Austausch DB_DATABASE=database
mit DB_DATABASE=database/database.sqlite
im .env - Datei. Doch der neue Fehler tritt auf, wenn ich versuche, um Elemente abzurufen, aus der Datenbank:
public function index()
{
// cause of the error
$cards = Card::all();
return view('cards.index', compact('cards'));
}
Den oben genannten Maßnahmen wirft folgenden Fehler:
InvalidArgumentException in SQLiteConnector.php Zeile 34:
Datenbank (Datenbank/Datenbank.sqlite) nicht vorhanden ist.
Das merkwürdige ist, dass das Kommando Card::all()
funktioniert einwandfrei in php artisan tinker
- Modus. Welche Art von Magie ist das?
Jedenfalls habe ich auch herausgefunden, dass die Zeile:
'database' => env('DB_DATABASE', database_path('database.sqlite')),
in database.php Datei ersetzt werden muss mit nur database_path('database.sqlite')
und alles beginnt, normal zu funktionieren.
Es scheint, dass die Wurzel des Problems ist env('DB_DATABASE')
nennen. Ich ging zu SQLiteConnector.php Datei und warf die Ausgabe der beiden env('DB_DATABASE')
und database_path('database.sqlite')
. Hier sind Ihre Ausgänge jeweils:
dd(env('DB_DATABASE')) // => 'database/database.sqlite'
dd(database_path('database.sqlite')) // => 'D:\www\project\database\database.sqlite'
Wie Sie sehen, Ihre Ausgabe unterscheidet sich, und das zweite ist, was erwartet wird. Ist das ein Laravel bug? Oder habe ich da etwas falsch verstanden?
- bitte erläutern Sie den downvote! Ich kann nicht verstehen, was ich falsch gemacht habe
- Ich weiß nicht, wer downvoted, aber berechtigte Frage, und du hast meine Stimme.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kurze Lösung
Aber nicht die Beantwortung der Frage, der Weg, das zu beheben "Datenbank nicht gefunden" Problem ist, ersetzen Sie die folgende Zeile in database.php:
mit
Den .env-Datei sollte enthalten:
Mit einigen Tests können Sie überprüfen, dass der link in DB_DATABASE
ist bezogen auf den "public" - Verzeichnis(zumindest auf meinem windows-Rechner). Deshalb sollten wir einführen ..\ vor den link.
Und natürlich, mit einem absoluten link sollte es auch tun
als @Josh schlägt
Den .env-Datei sollte enthalten:
Mit einigen Tests können Sie überprüfen, dass der link in DB_DATABASE
ist bezogen auf den "public" - Verzeichnis(zumindest auf meinem windows-Rechner). Deshalb sollten wir einführen ..\ vor den link.
Und natürlich, mit einem absoluten link sollte es auch tun
als @Josh schlägt
Update
Indem Sie den relativen Pfad, Migrationen scheitern, weil Sie verwenden Projekt-Verzeichnis als root-Verzeichnis...
Korrigieren alles, ich empfehle die Einstellung:
und das optimieren der sqlite-verbindungen in config/database.php wie folgt:
Ergänzen die awnser von unserem Freund @alexander-lomia
Ändern:
Zu:
in database.php
🙂
Anstatt einen relativen Pfad verwenden müssen Sie einen absoluten Pfad in Ihrem
.env
Datei.oder in deinem Fall:
Kürzeste und einfachste Lösung zum entfernen von Standard-mysql-Einstellungen .env und arbeiten in database.php. Das ist, was funktioniert-für mich zumindest.
Entfernen Sie die folgenden...
Dieser arbeitete für mich in Laravel 5.5
In .env-Datei müssen nur den Namen der Verbindung und entfernen Sie alle anderen
DB_
bezogene Einstellungen:DB_CONNECTION=sqlite_testing
Definieren Sie Ihre sqlite-Einstellungen in der
config/database.php
Datei:Meine Datei ist im
database/testing-db.sqlite
.Ich hab das gleiche problem wie du. Verwenden Sie die absolute Pfad in der ENV-Datei.
Besuchen Sie bitte die offizielle Dokumentation über diese https://laravel.com/docs/5.4/database