laravel模型工厂笔记

编程入门 行业动态 更新时间:2024-10-28 07:25:47

laravel<a href=https://www.elefans.com/category/jswz/34/1771358.html style=模型工厂笔记"/>

laravel模型工厂笔记

测试时,通常需要在执行测试前插入新数据到数据库。'模型工厂' 就是为了创建测试数据!
Laravel允许你使用”factories”为每个Eloquent模型定义默认的属性值集合,而不用手动为每一列指定值。
每个模型工厂,继承了 'Faker' 类,可查看 '',专门生成随机数据!1>文件路径:database/factories/ModelFactory.php2>工厂定义:// 下面是laravel默认的定义,User - 用户模型$factory->define(App\User::class, function (Faker\Generator $faker) {return ['name' => $faker->name,'email' => $faker->email,'password' => bcrypt(str_random(10)),'remember_token' => str_random(10),];});3>我们可以添加其它Eloquent模型的工厂定义,例如:Role - 角色模型$factory->define(App\Role::class, function (Faker\Generator $faker) {return ['name' => $faker->name,];});4>同一个Eloquent模型类,生成多个工厂。例如,除了正常用户外可能你想要为“管理员”用户生成一个工厂,你可以使用defineAs方法定义这些工厂:注意:使用的是 'defineAs()' 方法// User - 用户模型中的 'admin' 用户类型$factory->defineAs(App\User::class, 'admin', function ($faker) {return ['name' => $faker->name,'email' => $faker->email,'password' => str_random(10),'remember_token' => str_random(10),'admin' => true,];});5>仍旧是同一个Eloquent模型类,生成多个工厂。但可以使用raw方法获取基本属性而不用重复基本用户工厂中的所有属性,获取这些属性后,只需将你要求的额外值增补进去即可:$factory->defineAs(App\User::class, 'admin', function ($faker) use ($factory) {		// 这里匿名函数定义后多了一个 'use ($factory)'$user = $factory->raw(App\User::class);		// 获取最初的用户模型的字段属性return array_merge($user, ['admin' => true]);		// 扩展额外的字段即可!});6>使用工厂:1)make()创建模型但不将其保存到数据库:public function testDatabase(){$user = factory(App\User::class)->make();// 用户模型测试...}2)如果你想要覆盖模型的一些默认值,可以传递数组值到make方法。只有指定值被替换,其他数据保持不变:public function testDatabase(){$user = factory(App\User::class)->make(['name' => 'dongxuemin'		// 会将生成的name替换为 'dongxuemin']);// 用户模型测试...}3)创建多个模型集合:$users = factory(App\User::class, 3)->make();4)创建给定类型的集合:$user = factory(App\User::class, 'admin')->make();5)创建多个给定类型的集合:$user = factory(App\User::class, 'admin', 3)->make();6)持久化工厂模型:使用create()方法,不仅能创建模型实例,还可以使用 Eloquent 的 save()方法,将生成的数据保存到数据库create()使用方法,同 'make()' 完全一致create()+save(),可保存到数据库7)添加关联关系到模型:create()创建一个模型集合,对于集合,可以使用 'each()' 方法,处理集合中的每一个数据实例$users = factory(App\User::class, 3)->create()		// 创建了3个元素的集合->each(function($u) { 		// each()回调,处理每个集合$u->posts()->save(factory(App\Post::class)->make());	// 建立和 'Post' 的关联关系});

更多推荐

laravel模型工厂笔记

本文发布于:2024-03-08 02:04:03,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1719556.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:模型   工厂   笔记   laravel

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!