原文链接:https://www.wjcms.net/archive...模型目录调整不久前,泰勒·奥特威尔(TaylorOtwell)在推特上进行了一次民意调查询问社区是将所有模型放在一个app/Models文件夹中还是使用默认的app/目录,大多数人说他们将模型放在app/Models中。作为这项调查的结果,app/Models文件夹现在将默认包含在Laravel8中。如果您使用phpartisanmake:modelUser命令创建一个新模型,它将把新模型放在app/Models目录中。注意:一个值得注意的事情是,如果你不喜欢Models目录,只需删除app/Models目录,artisan命令将直接在app/目录中添加新模型,就像它在所有Laravel版本中一样模型工厂类调优Eloquent的模型工厂已完全重写为基于类的工厂,并得到改进以提供一流的关系支持。比如UserFactory,Laravel中包含的内容是这样写的:Factory{/***工厂对应型号的名称。**@varstring*/protected$model=User::class;/***定义模型的默认状态。**@returnarray*/publicfunctiondefinition(){return['name'=>$this->faker->name,'email'=>$this->faker->unique()->safeEmail,'email_verified_at'=>now(),'password'=>'$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi',//密码'remember_token'=>Str::random(10),];}}由于HasFactory生成的模型有新的特性,所以可以直接在controller中使用模型工厂,直接使用模型即可:useApp\Models\User;User::factory()->count(50)->create();由于模型工厂现在是一个简单的PHP类,所以状态转换可以写成类方法。此外,您可以根据需要向Eloquent模型工厂添加任何其他辅助类。例如,您的用户模型可能有一个暂停状态,它修改了它的一个默认属性值。您使用基础工厂的状态方法定义状态转换。您可以随意命名状态方法。毕竟,这只是一个典型的PHP方法:/***表示用户被挂起。**@return\Illuminate\Database\Eloquent\Factories\Factory*/publicfunctionsuspended(){return$this->state(['account_status'=>'suspended',]);}定义状态转换方法后,我们可以这样使用它:useApp\Models\User;User::factory()->count(5)->suspended()->create();如前所述,Laravel8的模型工厂包括对关系的一流支持。因此,假设我们的用户模型有一个帖子关联方法,我们可以简单地运行以下代码来生成一个具有三个帖子的用户:$users=User::factory()->hasPosts(3,['published'=>false,])->创建();为了简化升级过程,发布了laravel/legacy-factories包以支持Laravel8.x中模型工厂的先前迭代。Laravel重写的工厂包括许多我们认为你会喜欢的功能。要了解有关模型工厂的更多信息,请参阅数据库测试文档。关注我,每天更新文章。
