Pasti anda pernah mengalami kasus ingin menampilkan nama atau detail berdasar id dari tabel lain misalnya pada tabel barang terdapat id_supplier dengan value 1 , kamu ingin menampilkan siapa sih supplier itu beserta detail nya seperti nama,alamat,tlp dll. nah itu harus menggunakan relasi antar tabel
kali ini saya akan membahas penggunaan relasi pada laravel menggunakan Eloquent,
- Buat sebuah project laravel baru , sebagai contoh berinama 'relasi' . dengan
composer create-project laravel/laravel relasi-laravel --prefer-dist
kalau anda bingung baca Instalasi Laravel.
- Siapkan database yang akan digunakan dan lakukan configurasi di
app/config/database.php
- Buat 2 buah tabel berinama barang dan pemasok, copas saja script slq dibawah .
CREATE TABLE IF NOT EXISTS `barang` (
`id_barang` int(11) NOT NULL,
`nama` varchar(255) NOT NULL,
`jumlah` int(11) NOT NULL,
`id_pemasok` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
INSERT INTO `barang` (`id_barang`, `nama`, `jumlah`, `id_pemasok`) VALUES
(1, 'Djarum Black', 4, 1),
(2, 'Mizone', 5, 1),
(3, 'Aqua 100ml', 10, 1),
(4, 'Avian', 10, 2),
(5, 'Falcon Gold', 12, 2),
(6, 'Gembok Yale', 16, 2);
CREATE TABLE IF NOT EXISTS `pemasok` (
`id_pemasok` int(11) NOT NULL,
`nama` varchar(255) NOT NULL,
`alamat` text NOT NULL,
`telepon` varchar(20) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
INSERT INTO `pemasok` (`id_pemasok`, `nama`, `alamat`, `telepon`) VALUES
(1, 'PT.IndoFood', 'Jl.Papandayan Bandung', '0876637182'),
(2, 'PT.Barokah Jaya', 'Jl.Cimanuk Garut', '08384758945');
Relasi One to One
- Model
Buat 2 model baru dengan nama
Barang
dan
Pemasok
pada direktori
app/models/
Model Barang
app/models/Barang.php
class Barang extends Eloquent {
protected $table = 'barang'; //Mendefinisikan tabel terkait
protected $primaryKey = 'id_barang'; //Mendefinisikan primaryKey dari tabel terkait
//Buat function baru yang nantinya akan dipanggih
public function pemasok() {
//Relasi one to one menggunakan fungsi belongsTo
// Barang adalah nama class yang akan direlasikan
// id_pemasok maksudnya merelasikan berdasarkan id_pemasok yang ada di tabel barang
return $this->belongsTo('Pemasok', 'id_pemasok');
}
}
Model Pemasok
app/models/Pemasok.php
class Pemasok extends Eloquent {
protected $table = 'pemasok'; //Mendefinisikan tabel terkait
protected $primaryKey = 'id_pemasok'; //Mendefinisikan primaryKey dari tabel terkait
}
- Route
Disini kita akan menampilkan field dari database dengan memanfaatkan relasi yang ada.
Route::get('relasi-1', function()
{
$query = Barang::where('id_barang',1)->first();
return $query->pemasok->nama;
});
Penjelasan dari script di atas :
$query
berisi satu record barang yang diambil berdasarkan id_barang
pemasok
function yang ada pada model Barang.
nama
field yang ingin ditampilkan dari tabel pemasok
- Output
Relasi One to Many
- Model
Untuk model barang biarkan dulu seperti itu , kita akan melakukan sedikit perubahan pada model
Pemasok
yaitu menambahkan function bernama barang.
-
Model Pemasok
app/models/Pemasok.php
class Pemasok extends Eloquent {
protected $table = 'pemasok'; //Mendefinisikan tabel terkait
protected $primaryKey = 'id_pemasok'; //Mendefinisikan primaryKey dari tabel terkait
//Buat function baru yang nantinya akan dipanggih
public function barang() {
//Relasi one to one menggunakan fungsi belongsTo
// Barang adalah nama class yang akan direlasikan
// id_pemasok maksudnya merelasikan berdasarkan id_pemasok yang ada di tabel barang
return $this->hasMany('Barang', 'id_pemasok');
}
}
- Route
Disini kita akan menampilkan barang berdasarkan pemasok.
Route::get('relasi-2',function(){
$pemasok = Pemasok::where('id_pemasok',1)->first();
echo 'Pemasoknya : '. $pemasok->nama;
foreach ($pemasok->barang as $data)
echo '<li> Barang : ' . $data->nama .'</li>';
});
Penjelasan :
foreach
menampilkan data barang
$pemasok->barang
mengambil semua data barang yang berdasarkan pemasok terkait.
$data->nama
field yang ditampilkan dari tabel barang.
- Output
Relasi Many to Many
Penerapan relasi many to many dalam pembahasan ini kita membuat 3 buah tabel baru yaitu
post , tag dan
tag_relasi,
CREATE TABLE IF NOT EXISTS `post` (
`id_post` int(11) NOT NULL,
`judul` varchar(255) NOT NULL,
`content` text NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;
--
-- Dumping data for table `post`
--
INSERT INTO `post` (`id_post`, `judul`, `content`) VALUES
(1, 'Membuat Relasi dengan Eloquent di Laravel', 'cara membuat relasi dengan eloquent adalah bla bla bla '),
(2, 'Tutorial PHP dan Mysql', 'php dan mysql adalah sesuatu yang tidak bisa dipisahkan dalam sistem informasi.......'),
(3, 'Tutorial database mySql', 'cara menggunakan database sql adalah bla, bla, bla'),
(4, 'Tutorial array dengan PHP', 'caranya adalah bla, bla, bla '),
(5, 'Tutorial Laravel pemula', 'Laravel adalah ....');
CREATE TABLE IF NOT EXISTS `tag` (
`id_tag` int(11) NOT NULL,
`tag` varchar(255) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
--
-- Dumping data for table `tag`
--
INSERT INTO `tag` (`id_tag`, `tag`) VALUES
(1, 'laravel'),
(2, 'framework'),
(3, 'eloquent'),
(4, 'database'),
(5, 'php'),
(6, 'Sql');
CREATE TABLE IF NOT EXISTS `tag_relasi` (
`id_tag` int(11) NOT NULL,
`id_post` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data for table `tag_relasi`
--
INSERT INTO `tag_relasi` (`id_tag`, `id_post`) VALUES
(1, 1),
(2, 1),
(3, 1),
(4, 2),
(4, 2),
(4, 3),
(5, 4),
(6, 1),
(6, 2),
(1, 5);
- Model Post
class Post extends Eloquent {
protected $table = 'post'; #Deklarasikan nama tabel
protected $primaryKey = 'id_post'; #Deklarasikan primary key dari tabel terkait
# buat function baru berinama tag
# Many to many menggunkan fungsi belongsToMany
# Tag adalah model , tag_relasi tabel pivot
public function tag() {
return $this->belongsToMany('Tag', 'tag_relasi', 'id_post', 'id_tag');
}
}
- Model Tag
class Tag extends Eloquent {
protected $table = 'tag';
protected $primaryKey = 'id_tag';
# buat function baru berinama post
# Many to many menggunkan fungsi belongsToMany
# Post adalah model , tag_relasi tabel pivot
public function post() {
return $this->belongsToMany('Post', 'tag_relasi', 'id_tag', 'id_post');
}
}
Untuk tabel tag_relasi tidak perlu dibuatkan model karena hanya merupakan tabel pivot (perantara).
- Route
Pada route
relasi-4 menampilkan tag berdasarkan post dan route
relasi-5 menampilkan post berdasarkan tag
Route::get('relasi-4', function() {
# panggil post berdasarkan id
$post = Post::where('id_post', '=', '1')->first();
echo 'Post nya : '.$post->judul .'<br>';
# Tampilkan seluruh tag post tersebut
foreach ($post->tag as $data)
echo '<li>' . $data->tag . '</li>';
});
Route::get('relasi-5', function() {
# Temukan tag laravel
$tag = Tag::where('tag', '=', 'laravel')->first();
echo 'Tag nya : '.$tag->tag .'<br>';
# Tampilkan semua posting dengan tag laravel
foreach ($tag->post as $data)
echo '<li> Judul : ' . $data->judul . ' <strong>' . $data->content . '</strong></li>';
});
- OUTPUT
Relasi 4
Relasi 5

Selesai sudah pembahasan tentang 3 Relasi di atas , sebenarnya masih ada jenis relasi lain tapi mungkin lain waktu akan di posting tutorialnya..
Sumber :
Ilmuwebsiteku.com Relasi dengan database Eloquent