我有以下表用户,角色和数据透视表 role_user ,其中包含以下表格结构
用户
角色
ROLE_USER
USER_ID
<?php
class PivotTableSeeder extends Seeder {
public function run()
{
// Seeds the roles table
DB::table('roles')->delete();
DB::table('role_user')->insert(array(
array('user_id' => 1, 'role_id' => 1),
array('user_id' => 2, 'role_id' => 2),
array('user_id' => 3, 'role_id' => 1),
array('user_id' => 3, 'role_id' => 3),
array('user_id' => 3, 'role_id' => 5)
));
}
}
数据透视表使用DB select
是否有更好的种子表方式,包括数据透视表?
我想也许当我播种我的用户表时,它也将播种role_user表,而不是手动将数据插入数据透视表。
示例:
角色
用户
ROLE_USER
修改
我正在使用此Eloquent播种我的用户表。 无论如何,在为用户播种时,role_user也会更新吗?
User::create(array(
'id' => '1',
'username' => 'user',
'password' => 'pass'
));
User::create(array(
'id' => '2',
'username' => 'user2',
'password' => 'pass2'
));
答案 0 :(得分:8)
你可以尝试这个(假设你已经播种了角色):
$user = User::create(['id' => '1', 'username' => 'user', 'password' => 'pass']);
$user->roles()->sync([1,2]); // array of role ids
$user = User::create(['id' => '2', 'username' => 'user2', 'password' => 'pass2']);
$user->roles()->sync([3,4]); // array of role ids
我已使用[]
代替array()
,如果您的PHP
位于ver-5.4
之前,则应使用array()
。
答案 1 :(得分:6)
出于测试目的,我使用非常简单快速的方法,如下所示。
想象一下,我们拥有带有数据透视表的用户和类别(这来自JeffreyWay的生成器btw):
<?php
// Composer: "fzaninotto/faker": "v1.3.0"
use Faker\Factory as Faker;
class UsersTableSeeder extends Seeder {
public function run()
{
$faker = Faker::create();
foreach(range(1, 100) as $index)
{
User::create([
'username' => $username = $faker->userName,
'email' => $faker->email,
'password' => Hash::make($username),
'account_id' => $index
]);
}
}
}
// all other seeders look the same, so I paste just the code that matters:
// Categories
foreach(range(1, 30) as $index)
{
Category::create([
'name' => $faker->word
]);
}
// pivot table
foreach(range(1, 50) as $index)
{
DB::table('category_user')->insert([
'category_id' => rand(1,30),
'user_id' => $faker->unique()->randomNumber(1, 100)
]);
}
答案 2 :(得分:1)
我不确定别人对此有何感受,但是在播种数据库时,我喜欢使用实际模型进行播种,这样就可以使用插入相关模型时带来的所有便利功能。
如果您使用预定义的ID为用户和角色播种,那么很容易。
class UserSeeder extends Seeder
{
public function run()
{
DB::table('users')->truncate();
DB::table('roles')->truncate();
DB::table('user_roles')->truncate();
$users = [];
$user = User::create(['id' => 1, 'blah' => 'honk']);
$users[$user->id] = $user;
$user = User::create(['id' => 2, 'blah' => 'honk']);
$users[$user->id] = $user;
// etc etc
$roles = [];
$role = Role::create(['id' => 1, 'blah' => 'honk']);
$roles[$role->id] = $role;
// etc etc
$user[1]->roles()->sync(1);
$user[2]->roles()->sync(2);
$user[3]->roles()->sync(1, 3, 5);
}
}
在我写的最近的一个应用程序中,我创建了一个播种器,创建了ACL组,然后创建了权限,为特定组分配了权限,然后在10-30(使用rand
)用户之间随机创建并随机创建将他们分配到不同的小组。
如果有什么不清楚,请告诉我。