我对Laravel还是陌生的,我正在尝试将某些种子植入数据库。
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run()
{
DB::table('users')->insert([
'name' => 'John Doe',
'email' => 'john@doe.com',
'password' => bcrypt('secret'),
'created_at' => \Carbon\Carbon::now()->toDateTimeString(),
'updated_at' => \Carbon\Carbon::now()->toDateTimeString()
]);
}
}
成功创建了一个自动递增id
的用户。
我现在想播种另一个名为user_settings
的表。 user_id
必须与插入的用户的自动递增ID相同。
DB::table('user_settings')->insert([
'user_id' => // This has to be the auto-incremented ID of the earlier inserted user.
]);
如何在此处访问已提供给用户的id
,以便可以将其植入user_id
的{{1}}中?
答案 0 :(得分:1)
通常,我所看到的在多个项目上工作的方法就是做与此类似的事情。
$user = factory(User::class)->create();
$setting = factory(UserSettings::class)->create(['user_id' => $user->id]);
这种方法要求您制作Seeders,这应该很简单,而且很干净。同时,这也是一种更灵活的方式。您可以轻松创建多个用户。
$users = factory(User::class, 10)->create(); //creates 10 users
答案 1 :(得分:1)
Query Builder类insertGetId()
中有一个漂亮的方法,其工作方式通常类似于insert()
方法,但是与insert()
不同,insertGetId()
将返回自动递增的id
public function run()
{
$id = DB::table('users')->insertGetId([
'name' => 'John Doe',
'email' => 'john@doe.com',
'password' => bcrypt('secret'),
'created_at' => \Carbon\Carbon::now()->toDateTimeString(),
'updated_at' => \Carbon\Carbon::now()->toDateTimeString()
]);
}