Laravel 8 模型工厂重构指南:从闭包到类

Laravel 8 模型工厂重构指南:从闭包到类

本文详细介绍了将Laravel 7的闭包式模型工厂重构为Laravel 8的类式模型工厂的步骤和最佳实践。内容涵盖了Laravel 8工厂的结构变化、HasFactory Trait的应用,以及如何正确地在工厂中引用其他模型工厂。同时,也提供了对现有项目进行平滑升级的兼容方案,帮助开发者高效完成工厂迁移,提升测试和数据填充的便利性。

Laravel 8 模型工厂的演变

laravel 8对模型工厂(model factories)进行了重大革新,从laravel 7及以前版本基于全局 $factory->define 闭包的定义方式,转向了更具面向对象特性的类式定义。这一改变提升了工厂的可维护性、可测试性和自动发现能力。

Laravel 7 模型工厂示例:

在Laravel 7中,模型工厂通常定义在 database/factories/ 目录下的一个文件中,使用 $factory->define 方法将模型类与一个返回数据数组的闭包关联起来。

define(Login::class, function (Faker $faker) {    $randomDateTime = $faker->dateTimeBetween('-6 hours', 'now');    return [        'user_id' => factory(AppUser::class), // 旧版工厂引用方式        'tenant_id' => factory(AppTenant::class), // 旧版工厂引用方式        'created_at' => $randomDateTime,        'updated_at' => $randomDateTime,    ];});

重构至 Laravel 8 类式工厂

Laravel 8 的模型工厂现在是独立的 PHP 类,通常位于 database/factories 目录下,并遵循 [ModelName]Factory 的命名约定。这些工厂类需要继承自 IlluminateDatabaseEloquentFactoriesFactory。

核心变化点:

类结构: 每个模型都有一个对应的工厂类。definition() 方法: 数据定义逻辑封装在 definition() 方法中,该方法返回一个包含模型属性的数组。$this->faker: 在 definition() 方法内部,可以直接通过 $this->faker 访问 Faker 实例。模型关联: 引用其他模型工厂时,使用 Model::factory() 静态方法。HasFactory Trait: 模型本身需要使用 IlluminateDatabaseEloquentFactoriesHasFactory Trait,以便Laravel能够自动发现并关联其对应的工厂。

Laravel 8 模型工厂示例:

以下是将上述 Login 模型工厂重构为Laravel 8类式工厂的示例。假设 Login 模型位于 AppModelsLogin,并且 User 和 Tenant 模型也已相应更新。

faker->dateTimeBetween('-6 hours', 'now'); // 使用 $this->faker        return [            'user_id' => User::factory(),    // 新版工厂引用方式            'tenant_id' => Tenant::factory(), // 新版工厂引用方式            'created_at' => $randomDateTime,            'updated_at' => $randomDateTime,        ];    }}

模型中的 HasFactory Trait:

为了让Laravel能够自动发现并使用 LoginFactory,AppModelsLogin 模型需要引入 HasFactory Trait。

<?phpnamespace AppModels;use IlluminateDatabaseEloquentFactoriesHasFactory;use IlluminateDatabaseEloquentModel;class Login extends Model{    use HasFactory; // 引入 HasFactory Trait    // ... 其他模型定义}

同样,User 和 Tenant 模型也需要引入 HasFactory Trait,并创建相应的 UserFactory 和 TenantFactory。

逐步重构指南

创建新的工厂类文件:在 database/factories 目录下为每个需要重构的模型创建一个新的 PHP 文件,例如 LoginFactory.php

定义工厂类结构:将每个文件定义为一个继承自 IlluminateDatabaseEloquentFactoriesFactory 的类。

namespace DatabaseFactories;use AppModelsYourModel; // 替换为你的模型use IlluminateDatabaseEloquentFactoriesFactory;class YourModelFactory extends Factory{    protected $model = YourModel::class;    public function definition()    {        // 返回模型属性数组        return [            // ...        ];    }}

迁移 definition 逻辑:将Laravel 7 $factory->define 闭包中的返回数组逻辑,复制到新工厂类的 definition() 方法中。请注意将 $faker 替换为 $this->faker。

更新工厂关联:将所有 factory(AppYourOtherModel::class) 的调用替换为 AppModelsYourOtherModel::factory()。确保 YourOtherModel 也已引入 HasFactory Trait 并有对应的工厂类。

在模型中引入 HasFactory Trait:打开每个对应的 Eloquent 模型文件(例如 app/Models/Login.php),并添加 use HasFactory;。

测试:运行你的测试或 Seeder,确保新的工厂能够正常工作。

兼容性方案 (临时过渡)

如果你没有足够的时间立即重构所有工厂,Laravel 提供了 laravel/legacy-factories 包,允许你在 Laravel 8 项目中继续使用旧版(Laravel 7 风格)的工厂。

composer require laravel/legacy-factories

安装此包后,你无需立即修改现有的 Laravel 7 工厂文件,它们将继续按预期工作。但这只是一个临时解决方案,强烈建议最终还是将工厂重构为 Laravel 8 的类式风格,以充分利用其带来的优势。

总结

Laravel 8 的模型工厂重构是框架迈向更现代化、更可维护架构的重要一步。通过将工厂定义封装在独立的类中,并利用 HasFactory Trait 进行自动发现,开发者能够更清晰、更高效地管理测试数据和填充逻辑。虽然初期需要一定的迁移工作,但长远来看,这将极大地提升开发体验和代码质量。务必记住在重构过程中,不仅要更新工厂文件本身,还要在相关的 Eloquent 模型中引入 HasFactory Trait。

以上就是Laravel 8 模型工厂重构指南:从闭包到类的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1293589.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月11日 09:13:04
下一篇 2025年12月11日 09:13:21

相关推荐

  • 云锋金融买了10000枚以太坊,和马云有什么关系?

    在加密资产市场持续演进的背景下,传统金融力量对以太坊(ETH)的战略兴趣正变得愈发明显。近期,香港上市公司云锋金融(00376.HK)的一则公告引起市场震动,其宣布董事会已批准在公开市场上将ETH作为储备资产进行购买,并已完成10000枚ETH的收购,总投资额高达4400万美元。 这一举措不仅代表了…

    2025年12月11日
    000
  • 以太坊联创:ETH未来或将上涨100倍,其将超越比特币(BTC)的货币基础

    以太坊联合创始人Joseph Lubin近期发表重磅观点,预测ETH未来具备百倍上涨潜力,并有望挑战比特币作为主流价值存储的地位。 他在X平台上公开表示,完全认同Bitmine董事长Tom Lee的看法:华尔街金融机构将大规模进入ETH质押领域。目前这些机构需为其传统基础设施支付高昂成本,而以太坊的…

    2025年12月11日
    000
  • CoinShares深度分析:关于近期以太坊(ETH)和山寨币的一些快速思考

    ‍ 自五月初以来,以太坊和整个市场发生了不少变化。5月9日,就在pectra升级之后,最初的催化剂出现,eth开始上涨并跑赢其他货币。升级本身并没有突然改变eth的基本价值。eth的表现已经持续了相当长一段时间,市场情绪非常低迷,而且从仓角度来看,eth在许多对冲交易中是做空的一方,或者在永续期货交…

    2025年12月11日 好文分享
    000
  • ETH领涨比特币滞涨?深度解析2025加密牛市中场信号

    Binance币安 官网直达: 安卓安装包下载: 欧易OKX ️ 官网直达: 安卓安装包下载: Huobi火币️ 官网直达: 安卓安装包下载: 最近市场出现明显分化,ETH表现强势领涨,而BTC则显得动力不足,甚至出现“以太涨、大饼跌”的背离行情。这并非偶然,而是牛市进入中场阶段的典型信号。理解这一…

    2025年12月11日
    000
  • 随着鲸鱼转向以太坊(ETH)英国债券飙升,比特币(BTC)能否守住109000美元?

    目录 要点介绍:比特币价格与黄金脱钩,面临鲸鱼抛售压力‍ 比特币能否守住109000美元关键取决于本周美国就业报告和其他宏观经济数据。 要点介绍: 比特币鲸鱼将数十亿美元转向以太币,凸显主要参与者对比特币108000美元支撑位信心减弱。比特币衍生品显示清算风险上升,如果跌破107000美元,将有3.…

    2025年12月11日 好文分享
    000
  • 什么是川普加密货币?川普的主要加密货币和项目介绍(2025年)

    什么是川普加密货币? 川普加密货币是指受美国前总统唐纳德·川普的形象、品牌或政治活动影响而诞生的数字资产。这类代币通常属于模因币(Meme Coin)范畴,交易活跃,价格波动剧烈,尤其在重大政治事件或与川普相关的加密领域新闻发布期间表现尤为突出。 川普的主要加密货币和项目(2025 年概览) 1.川…

    2025年12月11日
    000
  • 本周将有SUI、ENA、IMX等代币大额解锁

    根据Token Unlocks的数据,本周将迎来多款代币的大规模解锁(以下时间均为北京时间): Sui(SUI)将于9月1日早上8点解锁约4400万枚代币,占当前流通量的1.25%,估值约为1.45亿美元; Ethena(ENA)将在9月2日下午3点释放约4063万枚代币,占现流通量的0.64%,价…

    2025年12月11日
    000
  • 加密货币交易所软件排行榜 交易所app排行榜前十名2025

    Binance币安 官网直达: 安卓安装包下载: 欧易OKX ️ 官网直达: 安卓安装包下载: Huobi火币️ 官网直达: 安卓安装包下载: 2025年加密货币交易所App的竞争格局趋于稳定,头部平台凭借交易量、产品创新和安全性持续领跑。以下是综合多个权威榜单和市场数据整理出的十大交易所App排名…

    2025年12月11日
    000
  • 持仓110亿美元的比特币(BTC)巨鲸豪掷40亿美元押注以太坊(ETH),其ETH持仓规模超Sh

    一位神秘的超级巨鲸正悄然将巨额资金从比特币(BTC)转移至以太坊(ETH),引发市场广泛关注。这一大规模资产轮动表明,越来越多的机构与大型投资者正在增持以太坊,押注其未来增长潜力。 这位持有价值逾110亿美元比特币的巨鲸,近期再度抛售2.15亿美元的BTC,并通过去中心化交易平台Hyperliqui…

    2025年12月11日 好文分享
    000
  • RWA环球投行联盟香港揭幕圆满落幕

    目录 RWA联盟启航:战略规划揭晓双轮圆桌,智慧交锋战略签约·鸣锣开市,共启落地新篇章协同发展与未来愿景香港首发,迈向全球布局关于 XT Labs 2025年8月28日,在全球瞩目的比特币大会期间,rwa环球投行联盟成立大会于香港成功举行。本次活动由xt labs、bm intelligence、香…

    2025年12月11日 好文分享
    000
  • Hyperliquid(HYPE币)是什么?怎么买?HYPE代币经济学、未来展望及价格预测

    目录 HYPE 币最新新闻和价格动态Hyperliquid 是什么?Hyperliquid 的优势和特点Hyperliquid 的运作原理HYPE 币是什么?HYPE 代币经济学HYPE 代币质押HYPE 币价格图表HYPE 价格走势分析Hyperliquid(HYPE)价格预测1、2025 年 H…

    2025年12月11日 好文分享
    000
  • 欧易(OKX)平台大陆地区账号注册与使用教程(2025年最新)

    本教程旨在为大陆地区用户提供一份清晰、详尽的欧易(okx)平台注册与使用指南。通过遵循以下步骤,您可以轻松完成从账户创建、身份认证到安全设置的全过程,为您的数字资产交易之旅打下坚实的基础。 欧易(OKX)平台官网注册入口: 欧易(OKX)平台APP下载链接: 一、注册前的准备工作 1、准备一个安全且…

    2025年12月11日
    000
  • OKB币是什么?和OKX交易所的关系是?值得投资吗?

    OKB是由OK Blockchain基金会发行的全球通用积分,是全球领先的数字资产服务平台OKX的核心功能型通证。它不仅仅是一种简单的数字资产,更是支撑整个OKX生态系统的关键支柱。 OKB的持有者可以享受到平台交易费率的折扣、参与新项目上线的优先权(Jumpstart),并且它作为OKX自主研发的…

    2025年12月11日
    000
  • 什么是创世区块?一文通俗解释创世区块

    在探讨区块链技术时,一个不可绕过的概念就是创世区块(Genesis Block)。顾名思义,它是一条区块链上的第一个区块,是整个链条的起点和基石。可以把它想象成一本数字账本的第一页,后续的所有记录都建立在这一页的基础之上。 每一条独立的区块链,从比特币到以太坊,再到其他成千上万的公链或私有链,都有其…

    2025年12月11日
    000
  • 以太坊的“合并”是什么?一文带你搞懂以太坊“合并”

    以太坊的“合并”(The Merge)指的是以太坊网络一次极其关键的技术升级。这次升级的核心是将以太坊主网与一个名为“信标链”(Beacon Chain)的独立区块链进行合并。通过这次操作,以太坊网络的共识机制发生了根本性的改变,从原有的工作量证明(Proof of Work, PoW)机制转换为了…

    2025年12月11日
    000
  • 什么是侧链?一文带你搞懂侧链是什么意思

    在区块链技术的世界里,随着应用场景的不断增多,主链的性能瓶颈问题日益凸显。为了解决交易拥堵、手续费高昂以及功能单一等问题,开发者们探索了多种扩容方案,侧链(Sidechain)便是其中一种备受关注的技术。理解侧链,就像理解一个庞大交通系统中的高效支线网络,它为主干道分担压力的同时,也开辟了新的可能性…

    2025年12月11日
    000
  • atas如何查看以太坊 一文带你了解以太坊atas查看步骤

    想要追踪您在以太坊网络上的交易记录或查看某个地址的资产情况吗?其实过程非常简单。本文将为您详细介绍如何使用主流的以太坊浏览器,轻松掌握查询地址和交易状态的方法,让您对链上动态了如指掌。 以太坊全球主流平台官网直达: 1、币安binance:  2、欧易OKX: 3、火币HTX: 4、大门Gate.i…

    2025年12月11日
    000
  • 什么是DeFi聚合器?一文带你了解DeFi聚合器

    去中心化金融(DeFi)的世界充满了创新与机遇,它构建了一个无需许可、透明的金融系统。随着协议和应用数量的爆炸式增长,用户面临着一个全新的挑战:信息过载与操作复杂性。不同的借贷平台提供着动态变化的利率,去中心化交易所(DEX)的流动性分散在各个角落,这使得普通用户很难找到最优的交易路径或收益策略。正…

    2025年12月11日
    000
  • 自动做市商 (AMM) 如何运作?通俗解释自动做市商的运作原理

    自动做市商(AMM)是去中心化金融(DeFi)领域的一项核心技术,它彻底改变了数字资产的交易方式。要理解自动做市商,可以将其想象成一个无需人工干预的、全天候自动运行的货币兑换亭。用户与这个兑换亭进行交互,而不是像传统交易所那样与其他交易者进行点对点的买卖匹配。这个兑换亭根据一个预设的数学公式来自动计…

    2025年12月11日
    000
  • BNB 认证服务 (BAS币) 2025–2030年价格预测 :未来价格能达到多少?

    目录  BAS币最新新闻和动态BNB认证服务(BAS)是什么?BNB 认证服务 开发团队介绍BAS币是什么?BAS 代币经济学BNB 认证服务 (BAS) 价格预测 2025–2030BNB 认证服务 (BAS) 价格预测布林带和动量指标BNB 认证服务 (BAS) 价格预测2025–2030BNB…

    2025年12月11日 好文分享
    000

发表回复

登录后才能评论
关注微信