Php 未找到Laravel基表或视图
Im my routes.php我有以下内容:Php 未找到Laravel基表或视图,php,laravel,laravel-4,laravel-routing,Php,Laravel,Laravel 4,Laravel Routing,Im my routes.php我有以下内容: <?php Route::group(array(), function () { View::share('roots', Category::roots()->get()); $tree = Category::get()->toHierarchy()->toArray(); View::share('categories', $tree); Route::get('/', array
<?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' => 'HomeController@index'));
});
似乎所有的php artisan
命令都使用routes.php
文件,因此当您尝试在该文件中访问数据库表(由于未运行迁移,表不存在)时,您将收到此错误。您无法运行php artisan migrate
,因为您会遇到此错误
一种解决方案是删除查询数据库的代码,但这当然不是一个好的解决方案。所以,您应该做的是从您曾经做过的第一次迁移中选择表(在您的情况下,可能是类别
。稍后您会有更多迁移,但这将是第一次),并添加类似的内容:
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;
}
}
当然,您需要配置您的环境。但现在您只在本地环境中运行此代码,在生产环境中不会运行此代码,因此不会影响应用程序性能。当然,我在这里假设你不会在生产中与artisan合作
编辑
但是,如果您仅将查询用于共享数据(而不用于路由),我将移动这些行:
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');
}
}
似乎所有的php artisan
命令都使用routes.php
文件,因此当您尝试在该文件中访问数据库表(由于未运行迁移,表不存在)时,您将收到此错误。您无法运行php artisan migrate
,因为您会遇到此错误
一种解决方案是删除查询数据库的代码,但这当然不是一个好的解决方案。所以,您应该做的是从您曾经做过的第一次迁移中选择表(在您的情况下,可能是类别
。稍后您会有更多迁移,但这将是第一次),并添加类似的内容:
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;
}
}
当然,您需要配置您的环境。但现在您只在本地环境中运行此代码,在生产环境中不会运行此代码,因此不会影响应用程序性能。当然,我在这里假设你不会在生产中与artisan合作
编辑
但是,如果您仅将查询用于共享数据(而不用于路由),我将移动这些行:
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');
}
}
你有没有读过,好像你有什么东西试图访问数据库;您是否向artisan添加了任何命令或服务?没有,我没有向artisan添加任何新命令或服务。。。我认为问题不在迁移方面,但你是对的。。。routes.php中的类别需要访问数据库,但如果我只想从命令行运行'php artisan',为什么它会接触routes.php…对于那些由于“migrations”表没有自动创建而最终出现在这里的人,这可能会有所帮助;您是否向artisan添加了任何命令或服务?没有,我没有向artisan添加任何新命令或服务。。。我认为问题不在迁移方面,但你是对的。。。routes.php中的类别需要访问数据库,但如果我只想从命令行运行“php artisan”,为什么它会接触routes.php……对于那些因为“migrations”表没有自动创建而最终出现在这里的人,这可能会有所帮助。@KarolFiturski,迁移中有什么内容?向我们展示代码我添加了迁移源当我简单地调用“php artisan”时也会出现相同的错误,那么为什么这个命令touch routes.php?谢谢这个解决方法工作正常,但是很难看。。。也许在laravel中有另一种跨视图共享数据的方法,所以我不必在routes.php中添加“Category”?@KarolFiturski,那么迁移中有什么?向我们展示代码我添加了迁移源当我简单地调用“php artisan”时也会出现相同的错误,那么为什么这个命令touch routes.php?谢谢这个解决方法工作正常,但是很难看。。。也许在laravel中有另一种跨视图共享数据的方法,这样我就不必在routes.php中添加“Category”了?