我正在跟随Jeffrey Way在laracasts中使用名为Incremental API的教程。
Laravel 4 faker class seeding和laravel 5.4之间有不同的编码。
我仍然遵循教程中的相同代码行" Seeders Reloaded"。现在,我坚持使用" Class LessonTagTableSeeder不存在"
TagTableSeeder
class TagsTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$faker = Faker::create('App\Tag');
for($i=1; $i <= 10; $i++) {
DB::table('tags')->insert([
'name' => $faker->word,
'created_at' => \Carbon\Carbon::now(),
'updated_at' => \Carbon\Carbon::now(),
]);
}
}
LessonTagTableSeeder
use Illuminate\Database\Seeder;
use Faker\Factory as Faker;
use App\Lesson;
use App\Tag;
class LessonTagTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$faker = Faker::create();
$lessonIds = Lesson::pluck('id')->all();
$tagIds = Tag::pluck('id')->all();
for($i=1; $i <= 30; $i++) {
DB::table('lesson_tag')->insert([
'lesson_id' => $faker->randomElement($lessonIds),
'tag_id' => $faker->randomElement($tagIds)
]);
}
}
DatabaseSeeder
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
use App\Lesson;
use App\Tag;
use DB;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::statement('SET FOREIGN_KEY_CHECKS=0');
Lesson::truncate();
Tag::truncate();
DB::table('lesson_tag')->truncate();
Model::unguard();
$this->call('LessonsTableSeeder');
$this->call('TagsTableSeeder');
$this->call('LessonTagTableSeeder');
DB::statement('SET FOREIGN_KEY_CHECKS=1');
}
我能够使用 php artisan db:seed --class = TagsTableSeeder
种植TagsTableSeeder当我运行&#34; php artisan db:seed --class = LessonTagTableSeeder&#34; ,我被提示:
[ReflectionException] 课程LessonTagTableSeeder不存在
您知道如何编辑上面的代码吗?任何帮助表示赞赏
答案 0 :(得分:8)
当您对播种器文件进行更改并且它不反映您的更改时,您需要运行composer dump autoload。
您可以使用以下任何一项命令
$ composer dump-autoload
$ composer du
$ composer dump
$ composer dump-autoload -o
然后尝试再次运行命令db:seed,它会反映您的更改。
composer dump autoload做什么?
composer dump-autoload
不会下载任何内容。它只是重新生成需要包含在项目中的所有类的列表(autoload_classmap.php)。非常适合在项目中安装新课程。
理想情况下,您可以执行编辑器dump-autoload -o
,以加快网页的加载速度。它不是默认的唯一原因是因为它需要更长的时间来生成(但只是略微明显)
答案 1 :(得分:3)
确保文件名为LessonTagTableSeeder.php
,并且与其他播种机位于同一目录中。然后运行以下命令:
composer du
之后尝试再次执行播种机。
答案 2 :(得分:1)
运行此命令,然后重试
composer dump-autoload -o
答案 3 :(得分:0)
Usually cache
php artisan cache:clear
composer update
php artisan serve
答案 4 :(得分:0)
数据透视表或关联表是映射两个其他表之间关系的表,对于具有多对多关系的两个表非常有用。
您为“数据库查看器”提供了3条关键代码:
$this->call('LessonsTableSeeder');
$this->call('TagsTableSeeder');
$this->call('LessonTagTableSeeder');
根据您所写的内容,您只运行了&#39; TagsTableSeeder&#39;以及&#39; LessonTagTableSeeder&#39;。您错过了运行&#39; LessonsTableSeeder&#39;。
的命令换句话说,您在&#39;标记&#39;中有记录。表格,但没有在课程&#39;表。因此,两个表之间没有关联的记录,SQL无法创建空关联(数据透视)表。
作为进一步说明,在创建关联表时,种子操作的执行顺序很重要。您必须在为其他两个表播种后执行关联表的种子命令。关联表需要知道每个其他表中的唯一标识符,以便创建关系。