UserFactory 中的 $factory 哪来的?

$factory->define(App\Models\User::class, function (Faker $faker) {
......
};

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 6

\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Factory.php 的一个实例

5年前 评论

@theDog 没见到声明,直接使用了呢?

5年前 评论
ruodee

我不是说答案的,我也搞不太清楚。以下是理解推测:
1.定义模型工厂:
$factory->define();这一定是一段中间代码,在句代码的前面一定是创建了$factory这个对象。
2.在何处使用:
模型工厂一定是数据填充的时候使用,也就是在EloquentSeeder执行的时候,通过函数factory(Eloquent::class)指定了(调用)Eloquent Factory。
3.如此推断,这必然和ServiceContainer的反射机制类似,指定哪个Eloquent::class,就会制造哪个用该Eloquent(Model)定义的Factory

希望有高手点拨一下,同样迷惑中?

5年前 评论

@老好人 vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factory.php中的load()方法,就是载入factory的,里面定义了$factory变量,并且有一句require

5年前 评论

@hustnzj 构造方法调用了load方法

5年前 评论

助手函数。在初始化的时候自动载入。有很多其他的没有引入,但是就直接使用的方法,很有可能是助手函数。
原型为:

if (! function_exists('factory')) {\
  /**\
 * Create a model factory builder for a given class, name, and amount.\ *\ * @param dynamic  class|class,name|class,amount|class,name,amount\
 * @return \Illuminate\Database\Eloquent\FactoryBuilder\
 */\  function factory()\
 {\  $factory = app(EloquentFactory::class);\
\
  $arguments = func_get_args();\
\
  if (isset($arguments[1]) && is_string($arguments[1])) {\
  return $factory->of($arguments[0], $arguments[1])->times($arguments[2] ?? null);\
 } elseif (isset($arguments[1])) {\
  return $factory->of($arguments[0])->times($arguments[1]);\
 }\\
  return $factory->of($arguments[0]);\
 }\}

weibo\vendor\laravel\framework\src\Illuminate\Foundation\helpers.php

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!