Я получаю очень странные результаты с Laravel 5, пользовательской конфигурацией базы данных и MAMP.

Я использую Laravel 5 с .env, а также с файлом config/database.php, который выглядит следующим образом:

'mysql' => array(
    'default' => 'mysql',
    'driver' => 'mysql',
    'unix_socket' => getenv('UNIX_SOCKET'),
    'host' => getenv('DB_HOST'),
    'database' => getenv('DB_DATABASE'),
    'username' => getenv('DB_USERNAME'),
    'password' => getenv('DB_PASSWORD'),
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => ''),

php artisan migrate терпит неудачу, когда я запускаю его, утверждая, что база данных не настроена. Однако я подозреваю, что делаю что-то неправильно в своем файле конфигурации, потому что когда я запускаю php artisan -V, я получаю это?

>php artisan -V
'mysql' => array(
    'default' => 'mysql',
    'driver' => 'mysql',
    'unix_socket' => getenv('UNIX_SOCKET'),
    'host' => getenv('DB_HOST'),
    'database' => getenv('DB_DATABASE'),
    'username' => getenv('DB_USERNAME'),
    'password' => getenv('DB_PASSWORD'),
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => ''
),Laravel Framework version Lumen (5.1.1) (Laravel Components 5.1.*)

php artisan просто распечатывает мой конфигурационный файл и игнорирует его?


person russellmania    schedule 24.06.2015    source источник
comment
вы возвращаете массив из файла конфигурации, и у вас есть открывающий его тег <?php?   -  person David Barker    schedule 24.06.2015


Ответы (1)


Файлы конфигурации Laravel и Lumen должны быть правильно структурированы, чтобы они работали. Также getenv() — это не та функция, которая вам нужна, вместо этого вам нужна env(). Конфигурация базы данных должна быть структурирована следующим образом (просто поменяйте местами свои переменные):

<?php

return [

    'default' => env('DB_CONNECTION', 'mysql'),

    'connections' => [
        'mysql' => [
            'driver'    => 'mysql',
            'host'      => env('DB_HOST', 'localhost'),
            'port'      => env('DB_PORT', 3306),
            'database'  => env('DB_DATABASE', 'forge'),
            'username'  => env('DB_USERNAME', 'forge'),
            'password'  => env('DB_PASSWORD', ''),
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => env('DB_PREFIX', ''),
            'timezone'  => env('DB_TIMEZONE','+00:00'),
            'strict'    => false,
        ]
    ]
];

Вот вам полный файл конфигурации базы данных Lumen.

person David Barker    schedule 24.06.2015
comment
Что ж, я скопировал ваш код здесь, и хотя я не получаю повтор файла конфигурации, я все равно получаю ошибки. Одна вещь: у меня есть файл .env, так почему я должен устанавливать переменные с помощью env(), а не получать те, которые у меня уже есть, с помощью getenv()? Я получаю сообщение об ошибке 1103 Incorrect table name , но я определенно заполняю свои собственные правильные настройки. - person russellmania; 24.06.2015
comment
env() получает переменную среды, указанную вами в первой переменной. Если он не существует, по умолчанию используется второй аргумент. Неверное имя таблицы... это другой вопрос, так как конфигурация явно работает, и вы подключены к базе данных. Попробуйте проверить имена таблиц в ваших моделях? - person David Barker; 24.06.2015
comment
Спасибо за информацию о getenv() и env(); это имеет смысл. Пока нет моделей; просто пытаюсь запустить php artisan migrate:install. Как ни странно, я решил проблему, переключившись на эту реализацию sqlite: bit.ly/1Ninhom - person russellmania; 24.06.2015
comment
Я просмотрел вашу ссылку на полный файл конфигурации базы данных Lumen, и там нет упоминания о параметре «unix_socket», который мне приходилось использовать с Laravel и MAMP. Все рекомендации предполагают, что я просто переключусь на бродягу вместо MAMP, но действительно ли этот вариант для входа в сокет unix просто недоступен? - person russellmania; 25.06.2015
comment
Попробуйте установить сокет Unix на хост вместо IP-адреса или локального хоста. - person David Barker; 25.06.2015