Php Laravel(5.6)如何为与其他表相关的表设置种子
目前有一些停机时间,我想我应该和laravel一起玩,因为我通常只在基本web开发中使用它 我尝试过播种机,喜欢将测试数据放入表中更快,但我不确定如何对具有关系的多个表执行此操作 在我的例子中,假设我有3个表,一个客户表,一个客户地址表和一个客户购买表 播种customer表很容易,因为它是主表,但其他两个表有一个名为customer_id的列,该列是对customer表的引用 如果我想使用seeders,我应该如何编写代码来创建X数量的客户,然后在其他表中创建以下记录,这些表链接回创建的客户 如果我遗漏了文档中的某些内容,请道歉。您可以简单地做一个foreach声明Php Laravel(5.6)如何为与其他表相关的表设置种子,php,laravel,Php,Laravel,目前有一些停机时间,我想我应该和laravel一起玩,因为我通常只在基本web开发中使用它 我尝试过播种机,喜欢将测试数据放入表中更快,但我不确定如何对具有关系的多个表执行此操作 在我的例子中,假设我有3个表,一个客户表,一个客户地址表和一个客户购买表 播种customer表很容易,因为它是主表,但其他两个表有一个名为customer_id的列,该列是对customer表的引用 如果我想使用seeders,我应该如何编写代码来创建X数量的客户,然后在其他表中创建以下记录,这些表链接回创建的客户
$customers = factory(Customer::class,N)->create();
foreach( $customers as $customer)
{
factory(CustomerAddress::class)->create([
'customer_id' => $customer->id
]);
factory(CustomerPurchase::class)->create([
'customer_id' => $customer->id
]);
}
注意:仅当您希望为每位客户提供地址和购买信息时,才建议这样做。
否则,您应该以不同的方式对待播种,而不是为每个客户提供地址和购买信息。
这会降低测试的可靠性您可以简单地做一个foreach语句
$customers = factory(Customer::class,N)->create();
foreach( $customers as $customer)
{
factory(CustomerAddress::class)->create([
'customer_id' => $customer->id
]);
factory(CustomerPurchase::class)->create([
'customer_id' => $customer->id
]);
}
注意:仅当您希望为每位客户提供地址和购买信息时,才建议这样做。
否则,您应该以不同的方式对待播种,而不是为每个客户提供地址和购买信息。
这会降低测试的可靠性文档中的一些修改代码:
$users = factory(Customer::class, 3)
->create()
->each(function ($u) {
$u->addresses()->save(factory(Address::class)->make());
$u->purchases()->saveMany(factory(Purchase::class, 10)->make());
});
文档中的一些修改代码:
$users = factory(Customer::class, 3)
->create()
->each(function ($u) {
$u->addresses()->save(factory(Address::class)->make());
$u->purchases()->saveMany(factory(Purchase::class, 10)->make());
});
首先,您需要在客户模型上设置。我假设客户模型与CustomerAddress和CustomerPurchase模型有关系 接下来,您需要定义一个 现在,您所要做的就是使用这些模型工厂在数据库中播种随机记录。您仍然可以使用雄辩的收藏,而且很好:
<?php
// database/seed/DatabaseSeeder.php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
factory(App\Customer::class, 10)->create()->each(function ($customer) {
$customerAddresses = factory(App\CustomerAddress::class, 2)->make();
$customerPurchases = factory(App\CustomerPurchase::class, 5)->make();
$customer->addresses()->saveMany($customerAddresses);
$customer->purchases()->saveMany($customerPurchases);
});
}
}
希望这能给您一些想法。首先,您需要在客户模型上设置。我假设客户模型与CustomerAddress和CustomerPurchase模型有关系 接下来,您需要定义一个 现在,您所要做的就是使用这些模型工厂在数据库中播种随机记录。您仍然可以使用雄辩的收藏,而且很好:
<?php
// database/seed/DatabaseSeeder.php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
factory(App\Customer::class, 10)->create()->each(function ($customer) {
$customerAddresses = factory(App\CustomerAddress::class, 2)->make();
$customerPurchases = factory(App\CustomerPurchase::class, 5)->make();
$customer->addresses()->saveMany($customerAddresses);
$customer->purchases()->saveMany($customerPurchases);
});
}
}
希望这能给你一些想法。向下滚动到Relationships谢谢我会阅读,我更喜欢看第一眼而不阅读:-向下滚动到Relationships谢谢我会阅读,我更多的是建立在第一印象的基础上,而不是阅读:-是的,我想过为每个人制作一个,并用faker模拟数据,但认为必须有一种合理的方法来做,如何在工厂内使用变量“customer_id”?是的,我想过为每个人制作一个,并用faker模拟数据,但认为必须有一种合理的方法i如何在工厂内使用变量“customer\u id”?迄今为止的最佳解决方案。迄今为止的最佳解决方案。