2015-03-30 3 views
4

Короче говоря, я полностью перепутал свои миграции с Laravel на своей локальной машине. Они на 100% непригодны для использования.Полностью перепродажа Laravel 5 Migration Stuff?

Я работаю с Laravel 5 в первый раз, поэтому я просто возился с вещами и тестировал воды, так сказать. Между ручным мастерингом с базой данных, переписыванием моих миграций, случайно удалением таблицы или двух (тогда сама таблица «миграции» [doh!]), Я вхожу в это смешанное состояние, и я просто хочу начать все миграция с нуля. Однако я не могу понять, как это сделать.

Я в настоящее время застрял в состоянии, когда я не могу сделать ничего.

Например, если какие-либо остатки старых таблиц все еще находятся в базе данных при выполнении php artisan migrate:refresh, я получаю сообщение об ошибке Base table or view already exists. Однако, если удалить все таблицы, я получаю эту ошибку:

Next exception 'Illuminate\Database\QueryException' with message 
'SQLSTATE[42S02]: Base table or view not found: 1146 Table 
'bsd_status.projects' doesn't exist (SQL: select * from `projects`)' in 
path/to/src/Illuminate/Database/Connection.php:620 

Я запустить следующие команды:

$ php artisan clear-compiled 
$ php artisan cache:clear 
$ php composer dump-autoload 
$ php artisan migrate:install 

Я даже не уверен, что я делаю этот материал в правильный порядок. Во всяком случае, кроме полной переустановки Laravel, как вернуть все свои миграции обратно в «из коробки»? Любая помощь будет принята с благодарностью. Благодаря!

+0

Вы пытались удалить всю базу данных, создав новую, а затем просто запустить миграцию? – nozzleman

+0

Удалить таблицу миграции, резервную папку миграций и оставить ее пустой. Теперь используйте пакет, который генерирует миграции из базы данных (поиск для нее) и вы закончили. – Kyslik

+0

его не «php composer dump-autoload» вам просто нужно использовать «компоновщик-автозагрузка» в случае автоматической загрузки композитора –

ответ

6

Что мне нравится делать, это вручную удалить все таблицы с помощью того инструмента, который вы используете на своем устройстве. Для меня я просто использую phpmyadmin. После этого я это делаю.

php artisan migrate:install 
php artisan migrate:refresh 

Не знаю, является ли это официальным способом, но он работает каждый раз.

Если вы не хотите использовать PHPMyAdmin вы можете просто Войти в MySQL через командную строку

mysql -u root -p 
DROP DATABASE laraveldb; 
CREATE DATABASE laraveldb; 
+0

он работает для меня !! во всяком случае, было бы здорово иметь резервную копию официальной документации, поэтому я могу положиться на этот метод :) – Bengalaa

2

Хотя @ комментарий Годдарда ответить и @ nozzleman были оба очень полезны (я использовал оба предложения несколько в других случаях, так что спасибо), решение не имело ничего общего с миграциями. Ну, ... кроме того, что я напортачил их, чтобы начать.

Как бы то ни было, я не исправил проблему, поэтому я надел свою шляпу «think really f'ing hard». Прокляв несколько минут, я кое-что понял. Оказалось, что даже при простом запуске artisan из командной строки - любые маршруты или провайдеры, которые я создал, пытались быть «разрешены» (или что бы то ни было, правильная терминология). Таким образом, я должен был позвонить где-нибудь, пытаясь получить данные из отсутствующей таблицы, когда приложение запустило фазу начальной загрузки/init/start/run.

Я решил убедиться, что в моем фактическом коде не было никаких странных вещей, поэтому я проверил в файле маршрутов (app/Http/routes.php) и всех моих файлов поставщика услуг (приложение/провайдеры/*), чтобы узнать, пытаюсь ли я получить данные модели в любом из них. И вот, я открыл приложение/Поставщики/AppServiceProvider.php и нашел это:

AppServiceProvider.php

public function boot() 
{ 
    $layout = 'default'; 

    if (Request::has('layout')) { 
     $layout = Request::input('layout'); 
    } 

    view()->share('sharedAppData', [ 
     'layout' => $layout, 
     'projects' => App\Project::all() // <- WTF, mate? 
    ]); 
} 

Если вы помните, таблица обжалуются в сообщениях об ошибках был назван «проекты ,«Таким образом, я пытался загружать все проекты при загрузке, поэтому независимо от того, что я сделал (в командной строке или в противном случае), ничего не получилось, потому что моя Eloquent-расширенная модель (App\Project) искала таблицу, которая просто не была

Мораль истории: Laravel очень сложна, я сосать на нее, и независимо от того, сколько раз я пытаюсь следовать учениям великого пути Джеффри, я навсегда буду Laran00b .