我有以下代码:
$this->actingAs(factory('App\User')->create());
$thread = factory('App\Thread')->make();
Run Code Online (Sandbox Code Playgroud)
create()和make()有什么区别?为什么它没有列在Laravel文档的帮助函数页面中?谢谢!:)
我想在Laravel中为Faker创建一个自定义提供程序(例如,一个用于随机构建名称).
我在哪里将自定义提供程序存储在我的应用程序中以及如何使用它?
有没有办法控制faker生成的电话号码的格式?
我打电话的时候:
Faker::PhoneNumber.cell_phone.to_i
Run Code Online (Sandbox Code Playgroud)
我最终得到了错误的价值.
我也想没有扩展.
最近,我一直试图通过Model Factories和Faker使用Laravel播种来播种我的数据库.
对于简单的模式,让它工作变得轻而易举:).但是,在处理涉及外键和表关系的复杂数据库模式时,我遇到了一些问题:
...就像链接中描述的那样: 模型工厂中的Laravel 5.1外键.
在本主题中,官方文档建议运行如下数据库种子:
public function run()
{
factory(App\User::class, 50)->create()->each(function ($u) {
$u->posts()->save(factory(App\Post::class)->make());
});
}
Run Code Online (Sandbox Code Playgroud)
...但是这个解决方案存在一个问题:当处理许多数据库表并运行许多种子(它们之间有许多关系)时,使用这种方法创建许多不必要的模型是很常见的.例如,如果我们在上面的示例之前运行了PostsTableSeeder.php,那么所有这些帖子都不会链接到用户,并且永远不会用于测试和开发......
为了找到处理这种情况的方法,我找到了一个适合我的功能解决方案,避免了那些'孤儿'模型的不必要的创建......
我想与大家分享,所以在答案中只是解释:).
为了用假数据填充我的Rails应用程序,我经常这样做:
person = Person.create(
:first_name => Faker::Name.first_name,
:last_name => Faker::Name.last_name,
:email => Faker::Internet.email
)
Run Code Online (Sandbox Code Playgroud)
这可能会产生person如下:
名字:Olivia
姓氏:Kubera
电子邮件:milan_nieklauson@bachmannjacob.net
有没有办法生成更连贯的假数据,如:
名字:Olivia
姓氏:Kubera
电子邮件:olivia_kubera@aol.com
或者我是否必须拿出自己的东西来实现这一目标?
我喜欢Faker,我一直用它seeds.rb来用真实的数据填充我的开发环境.
我也刚刚开始使用Factory Girl,这也节省了大量时间 - 但是当我在网络上搜索代码示例时,我没有看到很多人将两者结合起来的证据.
问:为什么人们不在工厂使用faker有充分的理由吗?
我的感觉是,通过这样做,我会通过随机播种随机但可预测的数据来增加我的测试的稳健性,这有望增加错误弹出的可能性.
但也许这是不正确的,并且没有任何好处比硬编码工厂或我没有看到潜在的陷阱.是否应该或不应该合并这两颗宝石有充分的理由吗?
现在我使用"Faker"公司名称进行单元测试失败.
看起来好像expect(response.body).to match(@thing.name)搞砸了.
在查看错误时,Faker公司的名称有时会包含"O'Brian Company"或"O'Hare Company"或类似名称.
faker是编码字符串吗?因为我知道匹配编码的字符串不是一个好主意,我真的不想只在Factory im中指定一个特定的公司名称.
谢谢
使用 C# Bogus 库,我想生成完全随机的对象,而无需显式枚举所有字段作为 RuleFor。
我如何配置我的 Faker 来实现这一目标?
我可以在FakerPHP/Faker包中看到这个 PHPDoc 块,但我不知道这是什么@template意思?您可以在该行的包的主分支中找到它
/**
* @template T of Extension\Extension
*
* @param class-string<T> $id
*
* @throws ContainerExceptionInterface
* @throws Extension\ExtensionNotFound
*
* @return T
*/
Run Code Online (Sandbox Code Playgroud) 如何在模型工厂中定义外键.例如,如果我有一个组织表,其中包含国家/地区表的外键,则在我的模型工厂中,我必须为国家/地区ID定义虚拟值,如下所示:
$factory->define(App\Organisation::class, function ($faker) {
return [
'name' => $faker->company,
'country_id' => 197,
];
});
Run Code Online (Sandbox Code Playgroud)
在我的组织表中播种器类我正在做以下但是faker对象不存在 - 我需要在播种器类中创建一个新的faker对象吗?
use Illuminate\Database\Seeder;
class OrganisationsTableSeeder extends Seeder
{
public function run()
{
$countryIds = Country::lists('id')->all();
factory('App\Organisation', 3)->create([
// override factory default
'country_id' => $faker->randomElement[$countryIds],
]);
}
}
Run Code Online (Sandbox Code Playgroud)
数据库播种者类
class DatabaseSeeder extends Seeder
{
public function run()
{
Model::unguard();
$this->call('CountriesTableSeeder');
$this->call('OrganisationsTableSeeder');
Model::reguard();
}
}
Run Code Online (Sandbox Code Playgroud)
什么是定义模型工厂时定义外键的最佳方法?是否可以从模型工厂中省略country_id并将其添加到播种器类中 - 从文档中可以看出,您只能覆盖模型工厂中定义的现有值,但是您无法通过播种器类添加新值 - 正确我,如果我错了?