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


    原文连接:https://www.wjcms.net/archives/laravel8更新之模型目录及模型工厂类调整

    模型目录调整

    不久前,泰勒·奥特威尔(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 DatabaseFactories;
    
    use AppModelsUser;
    use IlluminateDatabaseEloquentFactoriesFactory;
    use IlluminateSupportStr;
    
    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),
            ];
        }
    }
    

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

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

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

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

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

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

    use AppModelsUser;
    
    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重新编写的工厂包含许多我们认为您会喜欢的功能。要了解有关模型工厂的更多信息,请查阅数据库测试文档

    关注我,每天更新文章。

  • 相关阅读:
    网络编程(1)
    反射,魔法方法,单例模式
    远程的文件传输
    DNS
    windows服务
    outlook邮箱配置
    win7服务器搭建
    windows常用命令
    C盘满了怎么办
    0x80070035找不到网络路径
  • 原文地址:https://www.cnblogs.com/wjcms/p/13806585.html
Copyright © 2020-2023  润新知