Laravel :"php artisan db:seed" 不起作用
Laravel :"php artisan db:seed" doesn't work
我正在尝试 运行 "ServiceTableSeeder" table 在数据库中我收到一条错误消息。
我试试运行“php artisan db:seed
”
留言:
[symfony\component|Debug\Exception\FetalErrorException]
cannot redeclare DatabaseSeeder::run()
数据库播种器.php
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder {
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Eloquent::unguard();
$this->call('ServiceTableSeeder');
}
}
ServiceTableSeeder.php
<?php
class ServiceTableSeeder extends Seeder {
public function run()
{
Service::create(
array(
'title' => 'Web development',
'description' => 'PHP, MySQL, Javascript and more.'
)
);
Service::create(
array(
'title' => 'SEO',
'description' => 'Get on first page of search engines with our help.'
)
);
}
}
如何解决这个问题。我是 laravel 的新手,请指导我。
我认为问题出在您的 ServiceTableSeeder.php
文件上。您应该确保此文件中的 class 文件名是 ServiceTableSeeder
而不是 DatabaseSeeder
考虑到 Service 是您创建的一个模型,并且这个模型位于 App 文件夹内,在 App 命名空间内,试试这个:
修正你的 ServiceTableSeeder.php header:
<?php
use Illuminate\Database\Seeder;
use App\Service;
class ServiceTableSeeder extends Seeder {
public function run()
{
Service::create(
array(
'title' => 'Web development',
'description' => 'PHP, MySQL, Javascript and more.'
)
);
Service::create(
array(
'title' => 'SEO',
'description' => 'Get on first page of search engines with our help.'
)
);
}
}
由于您已将模型移动到 app\models,因此您必须在每个模型文件中声明:
Models.php:
namespace App\Models;
在你的种子文件中,使用:
use App\Models\Service.php;
您是否使用 composer 自动加载文件?如果是这样,请更新您的 composer.json 文件以包含您的模型位置:
"autoload": {
"classmap": [
"database",
"app/Models"
],
"psr-4": {
"App\": "app/"
}
},
最后,运行 在你的命令行中:
composer dump-autoload
对于那些面临相同问题的人,请确认 .env 文件中的 APP_ENV 变量,因为 Laravel 不要让我们 运行 db:seed 如果我们设置
'APP_ENV = Production'
为了数据库记录。
因此,确保将 APP_ENV 的值设置为 'staging' 或 'local',然后 运行 php artisan db:seed
我正在尝试 运行 "ServiceTableSeeder" table 在数据库中我收到一条错误消息。
我试试运行“php artisan db:seed
”
留言:
[symfony\component|Debug\Exception\FetalErrorException]
cannot redeclare DatabaseSeeder::run()
数据库播种器.php
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder {
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Eloquent::unguard();
$this->call('ServiceTableSeeder');
}
}
ServiceTableSeeder.php
<?php
class ServiceTableSeeder extends Seeder {
public function run()
{
Service::create(
array(
'title' => 'Web development',
'description' => 'PHP, MySQL, Javascript and more.'
)
);
Service::create(
array(
'title' => 'SEO',
'description' => 'Get on first page of search engines with our help.'
)
);
}
}
如何解决这个问题。我是 laravel 的新手,请指导我。
我认为问题出在您的 ServiceTableSeeder.php
文件上。您应该确保此文件中的 class 文件名是 ServiceTableSeeder
而不是 DatabaseSeeder
考虑到 Service 是您创建的一个模型,并且这个模型位于 App 文件夹内,在 App 命名空间内,试试这个:
修正你的 ServiceTableSeeder.php header:
<?php
use Illuminate\Database\Seeder;
use App\Service;
class ServiceTableSeeder extends Seeder {
public function run()
{
Service::create(
array(
'title' => 'Web development',
'description' => 'PHP, MySQL, Javascript and more.'
)
);
Service::create(
array(
'title' => 'SEO',
'description' => 'Get on first page of search engines with our help.'
)
);
}
}
由于您已将模型移动到 app\models,因此您必须在每个模型文件中声明:
Models.php:
namespace App\Models;
在你的种子文件中,使用:
use App\Models\Service.php;
您是否使用 composer 自动加载文件?如果是这样,请更新您的 composer.json 文件以包含您的模型位置:
"autoload": {
"classmap": [
"database",
"app/Models"
],
"psr-4": {
"App\": "app/"
}
},
最后,运行 在你的命令行中:
composer dump-autoload
对于那些面临相同问题的人,请确认 .env 文件中的 APP_ENV 变量,因为 Laravel 不要让我们 运行 db:seed 如果我们设置
'APP_ENV = Production'
为了数据库记录。
因此,确保将 APP_ENV 的值设置为 'staging' 或 'local',然后 运行 php artisan db:seed