热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

UserFactory中$factory变量的来源

导语:$factory这个变量到底是在哪里定义的,databasefactories目录下的文件是什么时候被执行的?问题引出图1(databasefactoriesUserFact






导语:$factory这个变量到底是在哪里定义的,database/factories目录下的文件是什么时候被执行的?



问题引出


图1(database/factories/UserFactory.php)
如上图所示,在这个文件中,$factory这个变量哪里来的,这段代码又是在哪里被执行的?


结论


图2(\Illuminate\Database\Eloquent\Factory)
图2黄色矩形框就是问题中的$factory,红色矩形框中的$file表示了database/factories下的各个factory文件,下面的require表示执行这些文件中的代码。
可以在这个foreach循环中打印这个$file->getRealPath(),结果就是database/factories下的各个factory文件。


推导过程

如图1中黄色矩形框所示,$factory这个变量就是\Illuminate\Database\Eloquent\Factory这个类的实例对象。在Laravel中,类的实例对象一般是在ServiceProvider中被创建的,所以找到与这个类最近的ServiceProvider,Illuminate\Database\DatabaseServiceProvider。在这个类的registerEloquentFactory方法中,

\Illuminate\Database\Eloquent\Factory对象的实例被创建了。图中的EloquentFactory,是Factory的别名,可以在文件的最上面看到。
深入Factory的构造方法,如图

发现是new了一个对象然后调用了load方法,接下去就和结论中讲的一样了。


结语

通过这次探索,我感觉\database\factories下的文件就像是配置文件,通过执行这些文件中的代码,给Factory对象的属性赋值,后面通过facroty这个帮助方法具体执行的时候,就从对象的属性中取值就行了。




推荐阅读
  • 本文详细探讨了Laravel框架中的数据库操作,包括读写分离、事务处理、Eloquent ORM的使用、关联关系管理及性能优化技巧。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 本文介绍了如何在多线程环境中实现异步任务的事务控制,确保任务执行的一致性和可靠性。通过使用计数器和异常标记字段,系统能够准确判断所有异步线程的执行结果,并根据结果决定是否回滚或提交事务。 ... [详细]
  • 本文详细介绍了如何使用 PHP 接收并处理微信支付的回调结果,确保支付通知能够被正确接收和响应。 ... [详细]
  • 云函数与数据库API实现增删查改的对比
    本文将深入探讨使用云函数和数据库API实现数据操作(增删查改)的不同方法,通过详细的代码示例帮助读者更好地理解和掌握这些技术。文章不仅提供代码实现,还解释了每种方法的特点和适用场景。 ... [详细]
  • 主调|大侠_重温C++ ... [详细]
  • 在尝试从数据库获取设置的过程中,遇到了一个致命错误:Fatal error: Call to a member function bind_param() on boolean。本文将详细分析该错误的原因,并提供解决方案。 ... [详细]
  • 深入解析Android中的SQLite数据库使用
    本文详细介绍了如何在Android应用中使用SQLite数据库进行数据存储。通过自定义类继承SQLiteOpenHelper,实现数据库的创建与版本管理,并提供了具体的学生信息管理示例代码。 ... [详细]
  • Django xAdmin 使用指南(第一部分)
    本文介绍如何在Django项目中集成和使用xAdmin,这是一个增强版的管理界面,提供了比Django默认admin更多的功能。文中详细描述了集成步骤及配置方法。 ... [详细]
  • 本文介绍了解决在Windows操作系统或SQL Server Management Studio (SSMS) 中遇到的“microsoft.ACE.oledb.12.0”提供程序未注册问题的方法,特别针对Access Database Engine组件的安装。 ... [详细]
  • ElasticSearch 集群监控与优化
    本文详细介绍了如何有效地监控 ElasticSearch 集群,涵盖了关键性能指标、集群健康状况、统计信息以及内存和垃圾回收的监控方法。 ... [详细]
  • 探讨ChatGPT在法律和版权方面的潜在风险及影响,分析其作为内容创造工具的合法性和合规性。 ... [详细]
  • MongoDB的核心特性与架构解析
    本文深入探讨了MongoDB的核心特性,包括其强大的查询语言、灵活的文档模型以及高效的索引机制。此外,还详细介绍了MongoDB的体系结构,解释了其文档、集合和数据库的层次关系,并对比了MongoDB与传统关系型数据库(如MySQL)的逻辑结构。 ... [详细]
  • CentOS 6.8 上安装 Oracle 10.2.0.1 的常见问题及解决方案
    本文记录了在 CentOS 6.8 系统上安装 Oracle 10.2.0.1 数据库时遇到的问题及解决方法,包括依赖库缺失、操作系统版本不兼容、用户权限不足等问题。 ... [详细]
  • 请看|间隔时间_Postgresql 主从复制 ... [详细]
author-avatar
夏目nyako酱丶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有