Assalamualaikum dan hai.
Kali ini saya ingin berkongsi bagaimana untuk memasukkan data user ke dalam dua table yang berbeza sewaktu user registration
pada applikasi kita.
Seperti yang anda lihat pada tag post, kita akan menggunakan Laravel. Dan secara spesifiknya, Laravel 8.
Baru-baru ini saya mendapat sebuah projek yang memerlukan saya untuk membina sebuah borang (form) untuk mengambil data pengguna dan data itu sangat banyak.
Pada mulanya saya kira hanya data biasa seperti Nama, email, dan password. Tetapi tidak. Didalam applikasi yang saya perlu bangunkan, terdapat banyak User Role
dan setiap data daripada user tersebut berbeza.
Jadi tidak boleh saya gunakan table users
kerana setiap daripadanya berbeza bukan.
Oleh kerana ini kali pertama saya buat, saya cuba untuk google dan cari di forum bagaimana untuk bangunkan fungsi seperti yang diminta. Saya pasti keyword saya salah dalam pencarian, jadi tidak jumpa.
Akhirnya saya meminta idea kepada seorang rakan yang juga Senior Developer (juga pengasas kepada Kiah.Store).
Selepas dia berikan Idea, terus saya laksanakannya. Saya ada terfikir logic yang sama seperti idea yang diberikan. Tetapi entah kenapa saya rasa macam tak yakin nak buat. Haha.
Mari kita laksanakannya.
Pertama, anda perlu buat Migration
dahulu. Sebagai contoh, students
.
php artisan make:migration create_students_table
Kedua, tentukan apa data yang perlu ada dalam table students
. Yang paling penting, perlu ada kolum user_id
.
public function up(){
Schema::create('students', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained()->onDelete('cascade');
$table->string('work_status');
$table->timestamps();
});
}
Ketiga, laksanakan Migration
.
php artisan migrate
Keempat, create Model Student
.
php artisan make:model Student
Kelima, hubungkan kedua table. Untuk Model User
kita akan kembalikan dengan hasMany
.
public function students() {
return $this->hasMany(Student::class);
}
Dan untuk Model Student
kita kembalikan dengan belongsTo
.
public function user() {
return $this->belongsTo(User::class);
}
Jangan lupa untuk masukkan $fillable pada Model Student
.
Keenam, kita perlu arahkan sistem untuk masukkan data kepada table yang berkenaan. Yakni yang kita inginkan, ada data masuk ke table users
, ada data yang masuk ke table students
.
Jadi pergi ke Registration Controller
kita. Saya menggunakan Controller
bawaan Laravel Breeze. Jadi tempatnya di App->Http->Controllers->Auth->RegisteredUserController.php
.
Anda boleh terus pergi ke Method Store dimana inilah tempat kita akan laksanakan logic kita.
Secara default, ini adalah yang disediakan.
public function store(Request $request) {
$request->validate([
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255',
'unique:users'],
'password' => ['required', 'confirmed', Rules\Password::defaults()],
]);
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
event(new Registered($user));
Auth::login($user);
return redirect(RouteServiceProvider::HOME);
}
Tetapi untuk memenuhi kreteria, ini adalah yang diperlukan.
public function store(Request $request) {
$request->validate([
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255',
'unique:users'],
'password' => ['required', 'confirmed', Rules\Password::defaults()],
// Tambahan validation untuk table students
'work_status' => ['required']
]);
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
// Create dan masuk ke table Students
$student = Student::create([
'user_id' => $user->id,
'work_status' => $request->work_status
]);
event(new Registered($user));
Auth::login($user);
return redirect(RouteServiceProvider::HOME);
}
Selepas semuanya selesai, cuba untuk register dan tengok dalam DB. Anda akan dapat hasil seperti ini di table students
.
Manakala di table users
, ianya akan berjalan seperti biasa :
Top comments (0)