Я установил Laravel 5 и Valet (v2.0.12) с помощью Homebrew на свой Macbook Pro (под управлением High Sierra (10.13.6)). Я загрузил чистый проект Laravel (laravel new blog).
Когда я пытаюсь выполнить миграцию (сижу в папке проекта, затем использую php artisan migrate), ничего не происходит. Терминал просто сидит и ничего не делает. Команда выполняется, но ничего. Ни ошибки, ни успеха, ничего. Даже добавление -v ничего не дает.
Я могу войти на сервер через командную строку. Я ввел правильные учетные данные в файл .env. Я даже могу запускать другие команды php artisan, но все команды migrate ничего не делают.
Мои файлы миграции:
2018_09_04_100609_create_users_table.php
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
2018_09_04_100659_create_password-Resets_table.php
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePasswordResetsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('password_resets', function (Blueprint $table) {
$table->string('email')->index();
$table->string('token');
$table->timestamp('created_at')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('password_resets');
}
}
Обновлять:
Проверил соединение с БД, используя следующее:
try {
DB::connection();
die("success!");
} catch (\Exception $e) {
die("Could not connect to the database. Please check your configuration. error:" . $e );
}
Получил «успех!».
Но затем я меняю DB::connection() на DB::connection()->getPdo(), он снова ничего не делает. Или это не актуально?
Вы сделали таблицы в папке миграции?
Я добавил код в свой исходный пост.
Попробуйте миграцию php artisan --force
или php artisan migrate: обновить
Можете ли вы сделать php artisan migrate:status, чтобы узнать, есть ли отложенные миграции?
Ни одна из функций php migrate не работает ...
Вы уверены, что ваше приложение может правильно подключаться к вашей базе данных из значений .env?
Если вы вручную создаете таблицу модели в своей базе данных, сможете ли вы вставлять значения с помощью запросов Eloquent или Laravel SQL?
@Mtxz stackoverflow.com/questions/33432752/… проверьте этот вопрос, а также можете ли вы поделиться своим файлом env (раздел db)
@Mtxz зацените опубликованное мной обновление.
@ HasanTıngır хороший совет! Благодарность!
@BlackFayah, не могли бы вы снова попробовать composer dump-autoload и migrate. (изменить: спасибо за обновление вашего вопроса). Может, это поможет.
@ HasanTıngır на самом деле только что опробовал метод из вопроса, который вы указали!
@Mtxz все тот же результат ...
выдает ошибку с DB::connection()->getPdo()?
@BlackFayah, ну это странно ... Я бы попытался удалить все миграции (сделать их резервную копию), создать новую миграцию с php artisan make:migration create_users_table, затем с composer dumpautoload, затем снова с migrate.
Я думаю, что перед этой проблемой вы удалили таблицы (кроме таблицы миграции). И когда вы снова пытаетесь выполнить миграцию, laravel проверил таблицу миграции и увидел, что миграции уже выполнены, и не смог найти другую миграцию?
@ HasanTıngır Нет. Просто создал базу данных, затем попытался выполнить миграцию. Больше ничего не делал. Обновлено: DB::connection()->getPdo() ничего не бросает.
@Mtxz По-прежнему ничего ...
Действительно? Даже после создания новой миграции с нуля? Можете ли вы попробовать добавить аргумент --path и указать пути миграции? видеть
@Mtxz по-прежнему ничего не делает. Обновлено: на этот раз даже попробовал с Laravel 5.5.
Wao .. Значит, вы клонируете совершенно новый ларавел, добавляете простую миграцию, а он вообще не работает? У меня нет идей ^^ `






Я исправил это. Я бы добавил после этого много восклицательных знаков, но мне этого не хочется. Почему?
Потому что проблема заключалась в том, что я использовал MySQL, тогда как мне следовало использовать MariaDB. В руководстве об этом нигде не упоминалось, поэтому я просто предположил, что MySQL было достаточно. Очевидно нет. Было бы неплохо, если бы ошибка показывала что-то подобное ...
Как вы это исправили?
@Raccoon, если я правильно помню, я перешел с MySQL на MariaDB, но, к сожалению, я не могу вспомнить подробности по этому поводу.
Ага, у меня это сработало. Спасибо
Я столкнулся с аналогичной проблемой, когда ни один из параметров миграции или сама миграция не работали, и я не получал ошибок, команда просто зависала. Я перешел с MySQL на MariaDB после того, как наткнулся на эту страницу и после множества других попыток. Это наконец сработало.
Вот как я это сделал. После этой статьи: - Как установить MariaDB в Ubuntu 20.04 (я устанавливал его в каплю на digitalocean, но я считаю, что эта концепция будет полезна для всех.
Установите MariaDB:
sudo apt update
sudo apt install mariadb-server
sudo mysql_secure_installation
Откройте MariaDB и создайте пользователя с правами администратора:
sudo mariadb
GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;
Проверьте, работает ли БД по мере необходимости:
sudo systemctl status mariadb
если не работает:
sudo systemctl start mariadb
Для полного объяснения перейдите по ссылке, которой я поделился
Кроме того, если у вас уже установлен MySQL, вам придется удалить его, иначе это приведет к сбою MariaDB при перезагрузке. Я столкнулся с этой проблемой позже, и MariaDB продолжала зависать, когда я пытался запустить ее, и в браузере появилась ошибка MYSQL 2002. Вот как -
sudo systemctl stop mariadb
echo "/usr/sbin/mysqld { }" | sudo tee /etc/apparmor.d/usr.sbin.mysqld
sudo apparmor_parser -v -R /etc/apparmor.d/usr.sbin.mysqld
Выполнение этих команд должно отображаться
Removal succeeded for "/usr/sbin/mysqld".
Затем запустите это
sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/usr.sbin.mysqld
Наконец, перезапустите mariadb
sudo systemctl start mariadb
Теперь все должно работать нормально и сохранится даже после перезагрузки.
Хотите поделиться файлом миграции? Без него можно только гадать.