laravel8更新之模型目录及模型工厂类调整

战战兢兢
• 阅读 1891

原文连接:https://www.wjcms.net/archive...

模型目录调整

不久前,泰勒·奥特威尔(Taylor Otwell)在Twitter上进行了一项民意调查,询问社区是否将所有模型都放在一个app/Models文件夹中或使用默认app/目录,并且大多数人表示他们将其模型放入app/Models。

由于该调查,app/Models默认情况下该文件夹现在将包含在Laravel 8中。

如果使用php artisan make:model User命令创建新模型,它将把新模型放在app/Models目录中。

注意:关于这一点的一个值得注意的事情是,如果您不喜欢该Models目录,只要删除该app/Models目录,该artisan命令将app/直接在目录中添加新模型,就像以前在所有Laravel版本中一样。

模型工厂类的调整

Eloquent的模型工厂已完全改写为基于类的工厂,并经过改进以提供一流的关系支持。例如,UserFactory,在Laravel中包含的内容是这样写的:

<?php

namespace Database\Factories;

use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;

class UserFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = User::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            'name' => $this->faker->name,
            'email' => $this->faker->unique()->safeEmail,
            'email_verified_at' => now(),
            'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
            'remember_token' => Str::random(10),
        ];
    }
}

laravel8更新之模型目录及模型工厂类调整

由于HasFactory生成的模型具有新特性,因此可以直接在控制器中使用模型工厂,只需要use一下模型:
use App\Models\User;

User::factory()->count(50)->create();

由于模型工厂现在是简单的PHP类,因此状态转换可以写为类方法。另外,您可以根据需要将其他任何帮助程序类添加到Eloquent模型工厂中。

例如,您的User模型可能具有suspended修改其默认属性值之一的状态。您可以使用基本工厂的state方法定义状态转换。您可以根据自己的喜好命名状态方法。毕竟,这只是一个典型的PHP方法:

/**
 * Indicate that the user is suspended.
 *
 * @return \Illuminate\Database\Eloquent\Factories\Factory
 */
public function suspended()
{
    return $this->state([
        'account_status' => 'suspended',
    ]);
}

定义状态转换方法后,我们可以像这样使用它:

use App\Models\User;

User::factory()->count(5)->suspended()->create();

如前所述,Laravel 8的模型工厂包含对关系的一流支持。因此,假设我们的User模型有一个posts关联方法,我们可以简单地运行以下代码来生成一个包含三个帖子的用户:

$users = User::factory()
            ->hasPosts(3, [
                'published' => false,
            ])
            ->create();

为了简化升级过程,已发布了laravel/legacy-factories软件包,以支持Laravel 8.x中模型工厂的先前迭代。

Laravel重新编写的工厂包含许多我们认为您会喜欢的功能。要了解有关模型工厂的更多信息,请查阅数据库测试文档

关注我,每天更新文章。

laravel8更新之模型目录及模型工厂类调整
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
3年前
java中比较两个时间的差值
项目背景1.某篇文稿的发布时间是publishDate,例如:2020072118:00:41。2.现要求判断该篇文稿的发布时间是否在近30天之内。publicstaticlongdayDiff(DatecurrentDate,DatepublishDate){LongcurrentTimecurrentDat
Wesley13 Wesley13
3年前
Java NIO选择器【源码笔记】
目录一、I/O复用模型回顾二、创建选择器1.Pipe函数2.Poll函数三、注册Channel到Selector四、Select返回就绪事件集合一、I/O复用模型回顾!(https://oscimg.oschina.net/oscnet/01e7f742f41c502c3ae941a
Stella981 Stella981
3年前
ClickHouse和他的朋友们(11)MySQL实时复制之GTID模式
原文出自:https://bohutang.me/2020/08/26/clickhouseandfriendsmysqlgtidreplication/!(https://oscimg.oschina.net/oscnet/6947542f4c9344619357677f41ef6e1e.png)最后更新:2020
Wesley13 Wesley13
3年前
Java爬虫之JSoup使用教程
title:Java爬虫之JSoup使用教程date:201812248:00:000800update:201812248:00:000800author:mecover:https://imgblog.csdnimg.cn/20181224144920712(https://www.oschin
Stella981 Stella981
3年前
KaliTools说明书+BurpSuit实战指南+SQL注入知识库+国外渗透报告
!(https://oscimg.oschina.net/oscnet/d1c876a571bb41a7942dd9752f68632e.gif"15254461546.gif")0X00KaliLinux Tools中文说明书!(https://oscimg.oschina.net/oscnet/
Wesley13 Wesley13
3年前
MySQL总结(十一)子查询
!(https://oscimg.oschina.net/oscnet/upa344f41e81d3568e3310b5da00c57ced8ea.png)子查询1\.什么是子查询需求:查询开发部中有哪些员工selectfromemp;通
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
ThinkPHP 根据关联数据查询 hasWhere 的使用实例
很多时候,模型关联后需要根据关联的模型做查询。场景:广告表(ad),广告类型表(ad\_type),现在需要筛选出广告类型表中id字段为1且广告表中status为1的列表先看关联的设置部分 publicfunctionadType(){return$thisbelongsTo('A
战战兢兢
战战兢兢
Lv1
扁舟坐泊,危亭孤啸,目断闲云千里。
文章
3
粉丝
0
获赞
0