Tutorial Laravel #24 : Relasi One To Many Eloquent

Relasi One To Many Eloquent – Setelah sebelumnya kita belajar tentang relasi One To One dengan Eloquent, pada tutorial ini kita masih akan bermain dengan relasi table pada laravel.
Kita akan belajar relasi One To Many Eloquent. silahkan baca juga tutorial sebelumnya jika belum, yaitu tentang relasi one to one eloquent.
Relasi One To Many Eloquent
Seperti yang sudah kita pelajari sebelumnya, Eloquent memiliki fitur untuk membuat relasi antar table dengan mudah. relasi one to many adalah relasi antar table yang mana satu buah table bisa memiliki banyak relasi ke record data yang ada di table yang satunya.
Akan saya contohkan dengan table articles, dan table tags. sebuah article bisa memiliki banyak tags, dan banyak tags bisa dimiliki oleh satu article. jadinya one to many atau many to one. 1 .. n atau n .. 1.
Persiapan
Kita akan membuat dua buah table, yaitu table article, dan table tags. dimana nantinya akan kita buat relasi table one to many (satu article bisa memiliki banyak tags).
Silahkan teman-teman buat kedua buah table tersebut dengan fitur migration dan mengisi data dummy ke dalam kedua table tersebut dengan menggunakan Faker.
Baca : Seeding dan Faker Pada Laravel
atau jika teman-teman ingin cepat, silahkan import sql berikut.
SQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
-- phpMyAdmin SQL Dump -- version 4.8.3 -- https://www.phpmyadmin.net/ -- -- Host: localhost:3306 -- Generation Time: Jan 15, 2019 at 05:52 AM -- Server version: 5.7.23 -- PHP Version: 7.2.10 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; -- -- Database: `belajar_laravel` -- -- -------------------------------------------------------- -- -- Table structure for table `articles` -- CREATE TABLE `articles` ( `id` int(10) UNSIGNED NOT NULL, `judul` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- -- Dumping data for table `articles` -- INSERT INTO `articles` (`id`, `judul`, `created_at`, `updated_at`) VALUES (1, 'Placeat saepe ea possimus provident quos est molestiae reiciendis.', NULL, NULL), (2, 'Totam laudantium molestiae similique sit.', NULL, NULL), (3, 'Aut consequatur ducimus ut non voluptatem voluptas.', NULL, NULL), (4, 'Ad sit voluptatem qui ut dolorem.', NULL, NULL), (5, 'Qui consequatur eum fuga corrupti.', NULL, NULL), (6, 'Quos nesciunt blanditiis amet odio.', NULL, NULL), (7, 'Ex doloremque consequuntur velit alias repellendus ullam.', NULL, NULL), (8, 'Perspiciatis a quo beatae nobis et suscipit illo.', NULL, NULL), (9, 'Maiores voluptate animi est enim totam.', NULL, NULL), (10, 'Rerum expedita inventore nulla voluptates perferendis placeat.', NULL, NULL); -- -------------------------------------------------------- -- -- Table structure for table `tags` -- CREATE TABLE `tags` ( `id` int(10) UNSIGNED NOT NULL, `tag` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `article_id` int(10) UNSIGNED NOT NULL, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- -- Dumping data for table `tags` -- INSERT INTO `tags` (`id`, `tag`, `article_id`, `created_at`, `updated_at`) VALUES (1, 'dolores', 2, NULL, NULL), (2, 'culpa', 3, NULL, NULL), (3, 'sit', 4, NULL, NULL), (4, 'quasi', 3, NULL, NULL), (5, 'inventore', 5, NULL, NULL), (6, 'ut', 7, NULL, NULL), (7, 'quisquam', 5, NULL, NULL), (8, 'fugiat', 7, NULL, NULL), (9, 'perspiciatis', 5, NULL, NULL), (10, 'voluptatem', 3, NULL, NULL), (11, 'non', 2, NULL, NULL), (12, 'ducimus', 5, NULL, NULL), (13, 'tempora', 4, NULL, NULL), (14, 'voluptatem', 10, NULL, NULL), (15, 'nisi', 3, NULL, NULL), (16, 'exercitationem', 10, NULL, NULL), (17, 'sed', 2, NULL, NULL), (18, 'tempora', 6, NULL, NULL), (19, 'laudantium', 7, NULL, NULL), (20, 'a', 6, NULL, NULL), (21, 'consequuntur', 9, NULL, NULL), (22, 'omnis', 1, NULL, NULL), (23, 'rerum', 9, NULL, NULL), (24, 'ut', 1, NULL, NULL), (25, 'amet', 10, NULL, NULL), (26, 'atque', 9, NULL, NULL), (27, 'at', 4, NULL, NULL), (28, 'hic', 3, NULL, NULL), (29, 'itaque', 1, NULL, NULL), (30, 'quia', 9, NULL, NULL), (31, 'consequatur', 8, NULL, NULL), (32, 'non', 9, NULL, NULL), (33, 'explicabo', 10, NULL, NULL), (34, 'eos', 6, NULL, NULL), (35, 'eveniet', 5, NULL, NULL), (36, 'dolor', 10, NULL, NULL), (37, 'magnam', 10, NULL, NULL), (38, 'aut', 1, NULL, NULL), (39, 'et', 6, NULL, NULL), (40, 'ut', 10, NULL, NULL); -- -- Indexes for dumped tables -- -- -- Indexes for table `articles` -- ALTER TABLE `articles` ADD PRIMARY KEY (`id`); -- -- Indexes for table `tags` -- ALTER TABLE `tags` ADD PRIMARY KEY (`id`); -- -- AUTO_INCREMENT for dumped tables -- -- -- AUTO_INCREMENT for table `articles` -- ALTER TABLE `articles` MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=11; -- -- AUTO_INCREMENT for table `tags` -- ALTER TABLE `tags` MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=41; |
jangan lupa untuk mengatur pengaturan koneksi database, di sini database yang saya gunakan adalah “belajar_laravel“.
.env
1 2 3 4 5 6 |
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=belajar_laravel DB_USERNAME=root DB_PASSWORD=root |
Persiapan kita anggap selesai.
Relasi One To Many Eloquent
Perhatikan sedikit konsep relasi antar table laravel one to many berikut.

relasi satu ke banyak eloquent laravel
Perhatikan. di sini kita memiliki beberapa data pada table articles. dan kita juga telah memiliki beberapa data pada table tags. kedua table ini akan dihubungkan secara otomatis oleh kolum article_id yang ada pada table tags.
maksudnya, article_id di ambil dari nama table (article) dan kolum (id) pada table tersebut. hal ini sudah secara otomatis dijalankan oleh eloquent. jadi silahkan teman-teman sesuaikan.
Seperti pada saat membuat contoh relasi one to one, kita membutuhkan model untuk kedua buah table tersebut. yaitu model article dan model tag.
Buat model article. disini saya membuat model dengan php artisan.
php artisan make:model Article
Karena sebelumnya kita membuat table dengan nama articles, jadi sudah sesuai plural penamaan pada nama model dan table nya. kita tidak perlu lagi mendeklarasikan protected $table = “articles”. tapi jika teman-teman ingin mendeklarasikan nya tidak masalah juga.
belajar_laravel/app/Article.php
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Article extends Model { public function tags(){ return $this->hasMany('App\Tag'); } } |
perhatikan pada model Article.php di atas. kita membuat fungsi untuk memberitahukan ke sistem bahwa kita akan membuat relasi Many ke model atau table tags.
1 2 3 |
public function tags(){ return $this->hasMany('App\Tag'); } |
kita mendeklarasikan table/model article ini dengan model/table tag. menggunakan fungsi return $this->hasMany(‘App\Tag’). yang berarti kita memberitahukan bahwa article bisa mempunyai banyak tag.
Selanjutnya kita akan membuat kebalikannya.
Buat model Tag.php.
php artisan make:model Tag
Kemudian tulis fungsi berikut.
belajar_laravel/app/Tag.php
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php namespace App; use Illuminate\Database\Eloquent\Model; class tag extends Model { public function article(){ return $this->belongsTo('App\Article'); } } |
Pada model Tag.php ini, kita deklarasikan bahwa table Tags ini dimiliki atau terhubung dengan model/table article.
1 2 3 |
public function article(){ return $this->belongsTo('App\Article'); } |
Selanjutnya, kita akan mencoba menampilkan hasil dari contoh relasi one to many eloquent laravel ini.
Buat sebuah route baru.
belajar_laravel/routes/web.php
1 |
Route::get('/article', 'WebController@index'); |
route yang kita buat ini akan menjalankan method index() pada controller WebController.
Buat controller WebController.php.
php artisan make:controller WebController
Selanjutnya buat method index() di dalamnya.
belajar_laravel/app/Http/controllers/WebController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Article; class WebController extends Controller { public function index(){ $artikel = Article::all(); return view('article',['artikel' => $artikel]); } } |
Perhatikan pada method index() di atas, kita mencoba mengambil semua data dari table articles melalui model article. dan kita passing data nya ke view article.blade.php.
1 2 3 4 |
public function index(){ $artikel = Article::all(); return view('article',['artikel' => $artikel]); } |
Pada view article.blade.php akan kita tampilkan semua article, lengkap dengan tag nya masing-masing yang sudah kita hubungkan relasi nya pada model Article.php dan model Tag.php.
Buat view article.blade.php.
belajar_laravel/resources/views/article.blade.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<!DOCTYPE html> <html> <head> <title>Tutorial Laravel #24 : Relasi One To Many Eloquent</title> <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <div class="container"> <div class="card mt-5"> <div class="card-body"> <h3 class="text-center"><a href="https://www.malasngoding.com">www.malasngoding.com</a></h3> <h5 class="text-center my-4">Eloquent One To Many Relationship</h5> <table class="table table-bordered table-striped"> <thead> <tr> <th>Judul Article</th> <th>Tag</th> <th width="15%" class="text-center">Jumlah Tag</th> </tr> </thead> <tbody> @foreach($artikel as $a) <tr> <td>{{ $a->judul }}</td> <td> @foreach($a->tags as $t) {{$t->tag}}, @endforeach </td> <td class="text-center">{{ $a->tags->count() }}</td> </tr> @endforeach </tbody> </table> </div> </div> </div> </body> </html> |
dan coba kita lihat hasilnya sekarang.
php artisan serve
dan akses route article
localhost:8000/article

Relasi One To Many Eloquent
Seperti yang teman-teman perhatikan di atas, kita bisa langsung mengakses data tag untuk masing-masing judul, kita bisa langsung mengaksesnya dari data article.
1 2 3 4 5 6 |
<td> @foreach($a->tags as $t) {{$t->tag}}, @endforeach </td> <td class="text-center">{{ $a->tags->count() }}</td> |
Untuk menghitung jumlah tag masing-masing article, kita bisa langsung menggunakan fungsi count() seperti yang ada pada contoh di atas.
Oke teman-teman terima kasih, sekian tutorial relasi one to many eloquent laravel. selanjutnya kita akan belajar relasi many to many dengan eloquent laravel.
Jika teman-teman ingin membaca Dokumentasi laravel tentang relasi many to many eloquent, teman-teman bisa membaca nya di sini.
Tutorial Menarik Lainnya

Tutorial Laravel #41 : Action URL Laravel


Tutorial Laravel #40 : Multi Bahasa Localization Laravel


Tutorial Laravel #39 : Import Excel Laravel

