laravel - как установить идентификатор с автоматическим приращением на основе условия? - PullRequest
0 голосов
/ 03 марта 2020

У меня есть две регистрационные формы в Laravel с использованием одного и того же контроллера регистров. Если пользователь регистрируется как клиент, его идентификатор должен быть 1913xxxxxx, где x - это значение, начинающееся с 1. Таким образом, оно выглядит как 1913000001,1913000002, ..... Аналогично, если пользователь регистрируется как дилер, его идентификатор должен быть 1911xxxxxxx. с шагом 1. Они оба закачивают данные в таблицу users, поэтому я не уверен, как мне установить ограничение для такого случая.

RegisterController. php:

/**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return \App\Models\Users\User
     */
    protected function create(array $data)
    {

        $user = User::create([
            // Users table
            'user_id'=>$data['1913xxxxxx' or '1911xxxxxx'],
            'email' => $data['email'],
            'password' => Hash::make($data['password'])
        ]);

        $user->userInfo()->create([
            'name' => $data['name'],
            'NRIC' => $data['nric'], // Create NRIC field.
        ]);

        $user->userAddresses()->create([
            'address_1' => $data['homeaddress1'],
            'address_2' => $data['homeaddress2'],
            'address_3' => $data['homeaddress3'],
            'zipcode' => $data['postcode'],

            'shipping_address' => $data['shippingaddress']
        ]);

        $user->userContacts()->create([

            'mobile_num' => $data['number'],
            'emergency_num' => $data['emergency']

        ]);

        // check if dealer form is registered, assign dealer role or otherwise

        if ($data['isDealerForm'] == 1) {

            $user->assignRole('2');
        } else {
            $user->assignRole('1');
        }
        // $user->assignRole('1');
        return $user;
    }
}

Это возможно

1 Ответ

3 голосов
/ 03 марта 2020

Создайте еще один столбец track_id в своей пользовательской таблице, где вы сохраните 1913xxxxxx или 1911xxxxxx для покупателя или дилера и сохраните идентификатор в качестве первичного ключа, автоматически инкриминируемого. Сначала создайте пользователя, а затем сохраните track_id с таким идентификатором

    $user = User::create([
                'email' => $data['email'],
                'password' => Hash::make($data['password'])
            ]);

   if ($data['isDealerForm'] == 1) {
            $user->track_id = 191300000+$user->id;
            $user->save();
            $user->assignRole('2');
        } else {
            $user->track_id = 191100000+$user->id;
            $user->save();
            $user->assignRole('1');
        }

Я надеюсь, что это решит вашу проблему.

update

Создайте свою миграцию как это

$table->unsignedBigInteger('track_id')->nullable();

, когда вы пытаетесь создать пользователя, он ищет значение track_id, которого нет, с вышеупомянутой миграцией, если значение не там, чем оно будет нулевым, но позже вы можете обновить значение после создания пользователь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...