如何解决如何在Laravel中将条目添加到数据透视表中?
在Laravel中为每个整体创建数据透视表时,我需要帮助
我有以下三个表
Abilities ability_model Models
+----------------+ +----------------------+ +-----------------+
| id | name | |ability_id| model_id | | id | name |
+----------------+ +----------------------+ +-----------------+
| 1 | View | | | | | 1 | Question |
|----------------| |----------------------| |-----------------|
| 2 | Create | | | | | 2 | Answer |
|----------------| |----------------------| |-----------------|
| 3 | Update | | | | | 3 | User |
|----------------| |----------------------| +-----------------+
| 4 | Delete | | | |
+----------------+ +----------------------+
如何使用工厂和播种机制作数据透视表
这是我的能力工厂:
<?PHP
/** @var \Illuminate\Database\Eloquent\Factory $factory */
use App\Model;
use Faker\Generator as Faker;
$factory->define(Model::class,function (Faker $faker) {
return [
//
];
});
这是我的能力播种者
<?PHP
use App\Ability;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
class AbilitySeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('abilities')->insert([
'name'=>'Delete'
]);
}
}
这是我的模型工厂:
<?PHP
/** @var \Illuminate\Database\Eloquent\Factory $factory */
use App\Model;
use Faker\Generator as Faker;
$factory->define(Model::class,function (Faker $faker) {
return [
//
];
});
这是我的模特播种者
<?PHP
use App\Model;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
class ModelSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('models')->insert([
'name'=>'Question'
]);
}
}
我应该在哪里添加foreach循环,应该如何编写它才能将每个功能分配给每个模型?
解决方法
当然,手动指定每个模型种子的属性很麻烦。相反,您可以使用模型工厂方便地生成大量数据库记录。首先,查看model factory documentation以了解如何定义工厂。定义工厂后,可以使用工厂助手功能将记录插入数据库中。
例如,让我们创建50个abilities
并为每个model
附加一个关系:
<?php
use App\Ability;
use App\Model;
use Illuminate\Database\Seeder;
class AbilitySeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
factory(Ability::class,50)->create()->each(function ($ability) {
$ability->model()->attach(factory(Model::class,rand(1,5))->create());
})
}
}
当然,如上所述,您需要正确定义工厂才能使其正常工作。
此外,您将需要在Ability模型中正确定义与模型的关系。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。