Terima kasih karena masih setia mengikuti artikel tutorial laravel bahasa indonesia yang kami buat. Kali ini kita akan sedikit menyinggung mengenai relationships, tepatnya basic relationships dengan laravel. Relationships akan kita bahas lebih banyak dan lebih mendetail lagi pada artikel tersendiri nantinya, kita akan berkenalan terlebih dahulu. Ada dua point yang akan kita singgung saat ini yakni : One to one dan One to Many.
Persiapan Membuat Relationships
Seperti yang kita ketahui, tutorial yang tersedia di daengweb semaksimal mungkin akan terus saling terkait. Oleh karena itu, sebelumnya kita telah memiliki model Post.php dan User.php, kedua table ini akan kita buat agar saling berelasi.
Terlebih dahulu, kita modifikasi migration post yang terletak di database/migration kemudian tambahkan user_id yang akan dijadikan foreign key.
$table->integer('user_id')->unsigned();
sehingga file migration untuk table posts, akan menjadi seperti ini :
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->string('title', 60);
$table->timestamps();
});
Jangan lupa modifikasi juga model Post.php dengan menambahkan user_id kedalam fillable property.
protected $fillable = ['user_id', 'title'];
Defining Relationships : One to Many
Menariknya syntax laravel untuk relationships sangat mudah untuk dipahami, sehingga untuk membuat relation one to many, cukup tambahkan method berikut pada Post.php :
public function user()
{
return $this->belongsTo(User::class);
}
Banyak post bisa dimiliki oleh satu user, sehingga kita menggunakan belongsTo sebagai tipe relationships. Kemudian pada User.php tambahkan juga method berikut :
public function post()
{
return $this->hasMany(Post::class);
}
Satu user bisa memiliki banyak post, jadi kita menggunakan hasMany.
Jadi dalam kedua case tersebut, Laravel menggunakan user_id yang terdapat pada Post untuk mengidentifikasi dan mecocokkan dengan id pada User.
Sampai disini, relationships One to Many sudah bisa digunakan. Sehingga memungkinkan kita untuk menggunakannya seperti ini :
$post = App\User::find(1)->post()->where('name', 'foo')->first();
Syntax diatas, memungkinkan kita untuk menggunakan post method dari User model, yang telah didefinisikan untuk mengambil post data yang dimiliki oleh user.
Sebagaimana yang anda lihat, pada dasarnya method tersebut memberikan kita data post dimana ‘name’ sama dengan ‘foo’ yang dimiliki oleh user id 1.
Karena dengan relationships, model User tahu mana data posts yang dimilikinya. Dan tentunya hal ini akan memudahkan kita dalam berkerja.
Kini kita berjumpa lagi dengan Tinker, yang sangat berguna untuk melakukan pengujian. Pertama, buat beberapa sample data pada table posts terlebih dahulu dan tentunya juga terdapat data pada table users. Kemudian jalankan tinker via command line :
php artisan tinker
lalu selanjutnya gunakan command :
$post = \App\User::find(1)->post()->get();
Kita menggunakan method find untuk menemukan user dengan id 1, kemudian mengambil data users yang terkait dengan posts. Asumsinya anda memiliki user id 1 dan memiliki beberapa data posts yang menggunakan user id tersebut, maka hasilnya akan terlihat seperti ini :
Defining Relationships : One to One
Tidak jauh berbeda pada maksud dan penggunaannya, jika one to many dimana user bisa memiliki banyak data posts, maka untuk one to one, user hanya memiliki 1 data terkait pada table yang telah didefinisikan. Kita masih akan menggunakan table users dan posts, maka relationships nya akan menjadi seperti ini pada model User:
public function post()
{
return $this->hasOne(Post::class);
}
sedangkan pada model Post tetap menggunakan belongsTo. Cukup mudah bukan ? Selamat jatuh cinta!
Comments