为啥 php artisan make:factory 不使用模型生成
Posted
技术标签:
【中文标题】为啥 php artisan make:factory 不使用模型生成【英文标题】:Why is php artisan make:factory not Generating with a Model为什么 php artisan make:factory 不使用模型生成 【发布时间】:2022-01-15 11:38:13 【问题描述】:长话短说,我的 Larvel 8 (Jetstream) 应用程序中有一个名为 Board 的模型。我正在尝试为这个 Board 模型生成一个工厂。
当我使用以下任一命令时:
php artisan make:factory BoardFactory
或
php artisan make:factory BoardFactory --model=Board
我生成了一个看起来没有错误或问题的工厂类。但是,当我打开该类时,它与模型无关。
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
class BoardFactory extends Factory
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
return [
//
];
我已经对我的应用程序中的所有模型进行了尝试,并且这种情况仍然存在。再次没有错误说找不到模型。该命令看似成功运行,但显然没有为模型生成工厂。
我知道如果需要我可以轻松地手动编写它,但我想了解为什么它不起作用以及如何解决它。我通过测试的速度越快……越好:)
提前感谢您的帮助。
【问题讨论】:
【参考方案1】:尝试发布您的 laravel 存根并确认存根文件内容已按预期定义。
-
发布存根。
php artisan stub:publish
-
具体来说,打开名为
factory.stub
的 stub 文件
<?php
namespace factoryNamespace ;
use Illuminate\Database\Eloquent\Factories\Factory;
use namespacedModel ;
class factory Factory extends Factory
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = model ::class;
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
return [
//
];
注意事项:
从外观上看,您当前的工厂存根似乎缺少以下部分:
// ...
use namespacedModel ;
// ...
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = model ::class;
// ...
理想情况下,在正常(默认)情况下,运行生成带有链接模型的工厂的命令应如下所示:
命令:
php artisan make:factory BoardFactory --model=Board
预期输出文件(database/factories/BoardFactory.php):
<?php
namespace Database\Factories;
use App\Models\Board;
use Illuminate\Database\Eloquent\Factories\Factory;
class BoardFactory extends Factory
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = Board::class;
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
return [
//
];
附录:
正如@miken32 的评论中所指出的,在2021 年 10 月 22 日之后发布的 Laravel 版本中,不再需要在 Factory 类中声明模型属性:
Laravel Pull Request
此时,数据库工厂有这个隐藏的特性 可以“猜测”数据库模型。
因此,此拉取请求建议从 工厂
stub
,可能当前的“猜测”逻辑适用于99.99%
的人。此外,我还向 我们从中删除protected $model = User::class
的骨架UserFactory.php
: laravel/laravel#5713.
【讨论】:
太棒了,谢谢你这完美的工作。我不知道存根,但它与您显示的完全一样。缺少模型属性 - 谢谢。 @robby11110 ,我很高兴能帮上忙。?以上是关于为啥 php artisan make:factory 不使用模型生成的主要内容,如果未能解决你的问题,请参考以下文章
为啥“php artisan serve”关闭端口? (也不住8000)
为啥我收到 Laravel php artisan 迁移错误?
为啥 php artisan make:factory 不使用模型生成