Всякий раз, когда я запускаю php artisan migrate
, в консоли отображается следующая ошибка:
[PDOException]
SQLSTATE [HY000] [14] не удалось открыть файл базы данных
Файл database.sqlite находится в базе данных /. Я запускаю Windows 10, Laravel 5.2. Конфигурация файла .env:
.env:
DB_CONNECTION=sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=homestead
DB_PASSWORD=secret
Я смотрел повсюду, но не смог найти причину этой ошибки и как ее решить.
Update
Мне удалось успешно выполнить миграции, заменив DB_DATABASE=database
на DB_DATABASE=database/database.sqlite
в .env файле. Тем не менее, новая ошибка возникает всякий раз, когда я пытаюсь получить элементы из базы данных:
public function index()
{
// cause of the error
$cards = Card::all();
return view('cards.index', compact('cards'));
}
Вышеуказанное действие вызывает следующую ошибку:
InvalidArgumentException в строке SQLiteConnector.php 34:
База данных (database/database.sqlite) не существует.
Странно, что команда Card::all()
работает безупречно в режиме php artisan tinker
. Что это за магия?
В любом случае, я также узнал, что строка:
'database' => env('DB_DATABASE', database_path('database.sqlite')),
в файле database.php необходимо заменить только database_path('database.sqlite')
и все начинает нормально работать.
Кажется, что корень проблемы - это вызов env('DB_DATABASE')
. Я пошел в файл SQLiteConnector.php и сбросил выходные данные как env('DB_DATABASE')
, так и database_path('database.sqlite')
. Вот их выходы соответственно:
dd(env('DB_DATABASE')) // => 'database/database.sqlite'
dd(database_path('database.sqlite')) // => 'D:\www\project\database\database.sqlite'
Как вы видите, их выход отличается, а второй - тем, что ожидается. Это ошибка Laravel? Или я что-то не понял?