前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >竟然有人质疑我还在用Laravel开发?别忘了PHP是最好的语言。(2)模型工厂类

竟然有人质疑我还在用Laravel开发?别忘了PHP是最好的语言。(2)模型工厂类

作者头像
王中阳Go
发布2022-10-26 14:11:02
2.8K0
发布2022-10-26 14:11:02
举报
文章被收录于专栏:Go语言学习专栏

之前写了一篇Laravel提高DB查询效率的文章,转发到群里后竟然有人质疑我说“Laravel是他好几年前用的框架,没想到现在还有人在用。”

纳尼,什么意思嘛?别忘了PHP是最好的语言!

个人认为Laravel是非常优雅的开发框架:优雅的设计模式、强大的功能实现、各种方便的扩展、持续的版本更新,更主要的是迄今为止我认为最优秀的技术开发社区。

我必须为Laravel打Call。

2020年9月8号,Laravel发布了8.0版本。Laravel计划于2022年1月25日发布9.0版本。

下面我介绍一下目前Laravel最新版(8.0版本)的新特性:

Laravel 8 通过引入 Laravel Jetstream,模型工厂类,迁移压缩,队列批处理,改善速率限制,队列改进,动态 Blade 组件,Tailwind 分页视图, 时间测试助手,artisan serve 的改进,事件监听器的改进,以及各种其他错误修复和可用性改进,对 Laravel 7.x 继续进行了改善。

Laravel Jetstream

Laravel Jetstream 是为 Laravel 设计的精美的应用程序脚手架。Jetstream 为你的下一个项目提供了完美的起点,包括登录、注册、电子邮件验证、双因子认证、会话管理、通过 Laravel Sanctum 提供的 API 支持以及可选的团队管理。Laravel Jetstream 替代并改进了可用于早期版本的 Laravel 的旧式身份验证 UI 支架。Jetstream 是使用 Tailwind CSS 设计的,你可以选择 Livewire 或 Inertia 脚手架。

模型类目录

由于压倒性的社区需求,现在默认的 Laravel 框架包含一个 app/Models 目录。我们希望你喜欢 Eloquent 的新家!所有相关的生成器命令均已更新,假定模型存在于 app/Models 目录(如果存在)。如果该目录不存在,则框架将假定你的模型应放置在 app 目录。

模型工厂类

模型工厂类由泰勒・奥特威尔(Taylor Otwell)贡献。Eloquent 模型工厂 已完全重写为基于类的工厂,并有完美的关联支持。例如 Laravel 中的 UserFactory 是这样写的:

代码语言:javascript
复制
<?php

namespace Database\Factories;

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

class UserFactory extends Factory
{
    /**
     * 工厂对应模型的名称。
     *
     * @var string
     */
    protected $model = User::class;

    /**
     * 定义模型的默认状态。
     *
     * @return array
     */
    public function definition()
    {
        return [
            'name' => $this->faker->name,
            'email' => $this->faker->unique()->safeEmail,
            'email_verified_at' => now(),
            'password' => 'xxxxxxxxx', // password
            'remember_token' => Str::random(10),
        ];
    }
}

由于在生成模型时可以使用新的 HasFactory trait,因此可以像以下方式使用模型工厂:

代码语言:javascript
复制
use App\Models\User;

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

因为模型工厂现在是简单的 PHP 类,状态转换可以直接写成一个方法。除此之外,你也可以给你的 Eloquent 模型工厂添加任意你需要的工具类。例如,你的 User 模型 有个 suspended 属性,现在你想修改它的一个默认的属性值,你可以使用基类工厂类的 state 方法来完成。方法名字可以随意设置,毕竟这是个很典型的 PHP 方法。

代码语言:javascript
复制
/**
 * 表示这个用户处于禁止状态
 *
 * @return \Illuminate\Database\Eloquent\Factories\Factory
 */
public function suspended()
{
    return $this->state([
        'account_status' => 'suspended',
    ]);
}

定义好我们就可以这样使用:

代码语言:javascript
复制
use App\Models\User;

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

像之前说到的,Laravel 8 的模型工厂包含了对模型关联的完美支持。现在假定我们的 User 模型有一个 posts 关联方法,我们只需要执行下面的代码就可以生成一个有 3 篇文章的用户。

代码语言:javascript
复制
$users = User::factory()
            ->hasPosts(3, [
                'published' => false,
            ])
            ->create();

为了简化升级过程,我们发布了一个 laravel/legacy-factories 扩展包,可以在 Laravel 8 中支持以前的模型工厂。

新版的模型工厂还包含了很多特性,想了解更多的话,请查看我后面更新的文档。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员升级打怪之旅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Laravel Jetstream
  • 模型类目录
  • 模型工厂类
相关产品与服务
数字身份管控平台
数字身份管控平台(Identity and Access Management)为您提供集中式的数字身份管控服务。在企业 IT 应用开发时,数字身份管控平台可为您集中管理用户账号、分配访问权限以及配置身份认证规则,避免因员工账号、授权分配不当导致的安全事故。在互联网应用开发时,数字身份管控平台可为您打通应用的身份数据,更好地实现用户画像,也可为用户提供便捷的身份认证体验,提升用户留存。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档