时间:2021-05-26
本文实例讲述了Laravel框架使用Seeder实现自动填充数据功能。分享给大家供大家参考,具体如下:
要查看代码,可以点击链接:https://github.com/laravel/framework
Laravel自动填充数据使用的是Seeder类
<?phpuse Illuminate\Database\Seeder;use Illuminate\Database\Eloquent\Model;class DatabaseSeeder extends Seeder{ /** * Run the database seeds. */ public function run() { // }}class MyTableSeeder extends Seeder{ public function run() { // }}你自定义的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();这个函数会清空这个模型所对应的数据表,所以请慎重使用。
<?phpuse Illuminate\Database\Seeder;use Illuminate\Database\Eloquent\Model;class DatabaseSeeder extends Seeder{ /** * Run the database seeds. */ public function run() { Model::unguard(); $this->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()函数来调用。
接下来我们来谈谈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=你要执行的类名称更多关于Laravel相关内容感兴趣的读者可查看本站专题:《Laravel框架入门与进阶教程》、《php优秀开发框架总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
AndroidListView填充数据的方法因为多人开发,为了是自己开发的模块方便融合到主框架中,同时也为了减小apk的大小,要求尽可能少的使用xml的布局文件
laravel框架添加数据:添加数据laravel框架添加数据的方式我这里使用的是model方式,此外还有一种是DB因为from提交数据,laravel框架需要
导语做开发的时候,添加测试数据是必不可少的,laravel内置了很方便的数据填充,下面是实例。注意:laravel5框架中已经内置了faker组建,不用安装数据
本文实例讲述了Laravel框架基于自带的用户系统实现登录注册及错误处理功能。分享给大家供大家参考,具体如下:一、默认Laravel不会自动帮你装上用户系统,二
如何用C#编程实现动态生成Word文档并填充数据的效果呢?要使用C#操作word,首先要添加引用1、添加引用->COM->MicrosoftWord11.0Ob