2014-10-03 5 views
0

Im мой routes.php я иметь следующее содержание:Laravel базовой таблицы или просмотреть не найден

<?php 

Route::group(array(), function() { 
    View::share('roots', Category::roots()->get()); 
    $tree = Category::get()->toHierarchy()->toArray(); 
    View::share('categories', $tree); 

    Route::get('/', array('as' => 'home', 'uses' => '[email protected]')); 
}); 

Когда моя база данных не имеет таблиц еще и я хочу сделать PHP ремесленник мигрировать следующий результат: SQLSTATE [ 42S02]: Базовая таблица или представление не найдено: 1146 Таблица «ae_dev.categories» не существует

Моего файла миграция:

<?php 

use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 

class CreateCategoriesTable extends Migration { 

    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() { 
    Schema::create('categories', function(Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('parent_id')->nullable()->index(); 
     $table->integer('lft')->nullable()->index(); 
     $table->integer('rgt')->nullable()->index(); 
     $table->integer('depth')->nullable(); 
     $table->string('name', 255); 

     $table->timestamps(); 
    }); 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() { 
    Schema::drop('categories'); 
    } 

} 

Я думаю, что Laravel лоток для вызова Категории из маршрутов. php и хочу сделать select или somethink, поэтому я хочу запустить миграцию, которая создает таблицу категорий, но вышеуказанная ошибка возникает до ...

Как это исправить?

+0

Вы прочитали [эту главу] (http://laravel.com/docs/4.2/schema) – worldask

+0

Похоже, что у вас есть что-то, что пытается получить доступ к базе данных; Вы добавили какие-либо команды или услуги вашему ремесленнику? – Repox

+0

Нет. Я не добавлял никакой новой команды или услуги в artisan ... проблема не в стороне миграции, я думаю, но вы правы ... Категория в routes.php хочет получить доступ к базе данных, но почему это затрагивает routes.php, если все, что я хочу сделать, это запустить «php artisan» из командной строки ... –

ответ

5

Кажется, что все команды php artisan используют файл routes.php, поэтому при попытке в этом файле получить доступ к таблицам базы данных (а таблицы не существуют, потому что вы не выполнили миграцию), вы получите эту ошибку. И вы не можете запустить php artisan migrate, потому что вы получите эту ошибку.

Одним из решений является удаление кода, который запрашивает базу данных, но это, конечно, не очень хорошее решение. Так что вы должны сделать, это выбрать таблицу из первой миграции вы когда-либо сделать (в вашем случае это, вероятно, categories Позже вы больше миграции, но это будет первым.) И добавить что-то вроде этого:

if (!Schema::hasTable('categories')) 
{ 
    return; 
} 

в ваш routes.php файл.

Однако, если вы будете играть больше с миграциями и потребуется также другие таблицы в запросах вам нужно будет изменить вышеуказанное условие, например, в:

if (!Schema::hasTable('categories') || !Schema::hasTable('users')) 
{ 
    return; 
} 

, но он все равно будет вызывать некоторые проблемы - вам достаточно надеть «т хочет запустить этот код каждый раз, когда в маршрутах, так что я хотел бы сделать это так:

if ($env == 'local') { 

    if (!Schema::hasTable('categories') || !Schema::hasTable('users')) 
    { 
     return; 
    } 
} 

Вам нужно настроить среду конечно. Но теперь вы запускаете этот код только для локальной среды, при производстве этот код не будет запускаться, поэтому он не повлияет на производительность приложения. Конечно, я предполагаю, что вы не будете играть с мастером на производстве.

EDIT

Но в случае, если вы используете запросы только для обмена данных (а не для маршрутов), я бы переместить эти строки:

View::share('roots', Category::roots()->get()); 
$tree = Category::get()->toHierarchy()->toArray(); 
View::share('categories', $tree); 

к BaseController и методам запуска (или родительский конструктор) во всех контроллерах, которые расширяют его.

Старый ответ (не адекватен в данном случае) информация

ошибки достаточно ясно, с объяснением, что у вас нет таблиц в базе данных еще. Вы не можете запускать запросы к базе данных, если у вас нет таблиц.

В вашей миграции вы должны создать необходимые таблицы, например, это миграция таблицы пользователя:

<?php 

use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 

class NewUser extends Migration 
{ 

    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     Schema::create('users', function ($table) { 
      $table->engine = 'InnoDB'; 
      $table->increments('id'); 
      $table->string('user_name', 60)->unique(); 
      $table->string('email', 120)->unique(); 
      $table->string('passwd', 256); 
      $table->decimal('balance', 8, 2); 
      $table->rememberToken(); 
      $table->timestamps(); 
     }); 

    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     // 
     Schema::drop('users'); 
    } 

} 

Вы также не должны вставлять данные в базу данных при использовании миграции (как вы, вероятно, в настоящее время). Вы должны сделать это, пока seeding tables.

+0

У меня есть миграции, но я не могу запустить его ... –

+0

@KarolFiturski И что у вас есть в ваших миграциях? Покажите нам код –

+0

Я добавлен источник миграции –

Смежные вопросы