Как получить доступ к автоматически увеличенному идентификатору из базы данных? - PullRequest
1 голос
/ 09 июля 2019

Я очень новичок в 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 должно совпадать с идентификатором вставленного пользователя с автоинкрементом.

DB::table('user_settings')->insert([
    'user_id' => // This has to be the auto-incremented ID of the earlier inserted user.
]);

Как я могу получить доступ к id, который был предоставлен пользователю здесь, чтобы я мог заполнить это в user_id из user_settings?

Ответы [ 2 ]

1 голос
/ 09 июля 2019

В классе Query Builder есть изящный метод, insertGetId(), обычно работает как insert() метод, но в отличие от insert(), insertGetId() возвращает автоматически увеличенный идентификатор.

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

    }
1 голос
/ 09 июля 2019

Обычно подход, который я видел, работая над несколькими проектами, заключался бы в том, чтобы сделать что-то похожее на это.

$user = factory(User::class)->create();

$setting = factory(UserSettings::class)->create(['user_id' => $user->id]);

Этот подход требует, чтобы вы сделали Сеялки , что должно быть прямымвперед и это довольно чисто.Между тем также быть более гибким способом сделать это.Вы можете легко создать несколько пользователей.

$users = factory(User::class, 10)->create(); //creates 10 users
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...