跳转到主内容
极星编程网:以代码为星,赴技术山海!

使用Laravel框架的Seeder实现自动填充数据功能

这篇文章主要介绍了 laravel 框架使用seeder实现自动填充数据功能,结合实例形式分析了laravel基于seeder类实现自动填充数据的相关操作技巧与注意事项,需要的朋友可以参考下 本文实例讲述了Laravel框架使用Seeder实现自动填充数据功能。分享给大家供大家参考,具体如下: Laravel自动填充数据使用的是Seeder类
你自定义的Seeder只有一个run函数,里面写你的自动填充步骤 大家会注意到这两个函数
Model::unguard(); //你的填充操作 Model::reguard();
曾经对这两个函数非常疑惑,到底是干什么用的,只能推测是一对互为反作用的函数。于是去查了下源代码。 在目录 \vendor\laravel\framework\src\Illuminate\Database\Eloquent 下的Model.php下定义了这两个函数
/** * Disable all mass assignable restrictions. * * @param bool $state * @return void */ public static function unguard($state = true) { static::$unguarded = $state; } /** * Enable the mass assignment restrictions. * * @return void */ public static function reguard() { static::$unguarded = false; }
看Laravel作者的注释可以知道,是对数据填充限制的操作。 所以unguard在前,reguard在后,unguard负责解除自动填充操作限制,reguard负责恢复限制。 在填充操作之前,建议使用模型的成员函数
Model::truncate();
这个函数会清空这个模型所对应的数据表,所以请慎重使用。
call('PostTableSeeder'); Model::reguard(); } } class PostTableSeeder extends Seeder { public function run() { App\Post::truncate(); factory(App\Post::class, 1000)->create(); } }
这里有读者会问:为什么我们不把填充操作都写在自带的DatabaseSeeder的run函数里呢? 因为我们开发一个完整的系统时,可能要填充的数据表有很多张,不希望每次都要大量修改这个run函数。我们还希望每次填充都能保留下这个填充的过程,所以我们宁愿新写一个类,然后用$this->call()函数来调用。 Laravel 13.2.0 PHP中文网提供Laravel 13.2.0版本下载,Laravel框架 是基于 PHP 8.3+ 的高性能框架,官方推荐通过 Composer 安装。它内置 AI SDK、JSON:API Resources 及原生向量搜索,支持属性驱动开发与队列路由,大幅提升开发效率。相比旧版,13.2.0 优化了缓存 TTL 管理与实时通信,无需 Redis 即可横向扩展。作为现代 Web 开发首选,它兼顾安全与极速体验,助您快速构建企业级应用。 下载 接下来我们来谈谈factory。 文件目录 \database\factories\ModelFactory.php
$factory->define(App\Post::class, function ($faker) { return [ 'title' => $faker->sentence(mt_rand(3, 10)), 'content' => join("\n\n", $faker->paragraphs(mt_rand(3, 6))), 'published_at' => $faker->dateTimeBetween('-1 month', '+3 days'), ]; });
虽然能看懂,但是不知道这个$factory变量是什么?因此去查Factory类找。 在目录 \vendor\laravel\framework\src\Illuminate\Database\Eloquent 的Factory.php找到源代码
/** * Define a class with a given set of attributes. * * @param string $class * @param callable $attributes * @param string $name * @return void */ public function define($class, callable $attributes, $name = 'default') { $this->definitions[$class][$name] = $attributes; }
/** * Create an instance of the given model and persist it to the database. * * @param string $class * @param array $attributes * @return mixed */ public function create($class, array $attributes = []) { return $this->of($class)->create($attributes); }
开始填充数据,我们还是使用artisan命令行
php artisan db:seed
这个命令会执行你写在DatabaseSeeder.php里面所有的类的run函数,如果以后项目复杂了,没有必要执行已经执行过的,所以在命令行后面加参数,只要执行某个类的run函数即可
php artisan db:seed --class=你要执行的类名称
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网! 相关推荐: 关于Laravel框架路由和控制器的绑定操作 对于Laravel框架的生命周期与原理分析 Laravel框架的路由设置

相关文章