如何从数据库种子访问自动递增的ID?

时间:2019-07-09 09:31:22

标签: laravel eloquent

我对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}}中?

2 个答案:

答案 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()
           ]);

    }