Ads 970x90

List Labels

iklan banner

Newsletter

Interaksi Dengan Database Mysql Laravel Fungsi Like

Post a Comment

Interaksi Dengan Database

Hi, selamat siang, di kesempatan akan membahas tentang mysql laravel fungsi like Interaksi Dengan Database simak selengkapnya 

Pada tulisan sebelumnya kita sudah bersama-sama membuat halaman web pertama dengan laravel. Satu buah halaman sederhana yang cuma memajukan sebuah tulisan “halo, bro”. Pada kenyataannya, kala kita membentuk sebentuk website, data yang ditampilkan bukan cuma sekedar tulisan “halo, bro”, tetapi merupakan data benar yang berasal dari database. Oleh karena itu, ala tulisan ini kita akan bersama-sama berguru bagaimana caranya berhubung dengan database menggunakan laravel.

Persiapkan database

Untuk tutorial kali ini kita akan memakai sebentuk table bernama post dengan struktur sebagai berikut:

Tidak harus khawatir jika Anda merasa cukup malas untuk membuat tablenya sendiri karena di bawah ini sudah script sql-nya (ups, mysql only ya :D):

CREATE TABLE `post` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) DEFAULT NULL,
  `content` text,
  `comment_count` int(11) NOT NULL DEFAULT '0',
  `status` enum('draft','publish') NOT NULL DEFAULT 'draft',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

INSERT INTO `post` (`id`, `title`, `content`, `comment_count`, `status`)
VALUES
	(1, 'Halo bro', 'content 1', 2, 'publish'),
	(2, 'Basic Routing', 'content 2', 10, 'publish'),
	(3, 'Nested Layout Menggunakan Blade', 'content 3', 1, 'draft');

Konfigurasi database

Setelah table siap, langkah berikut ialah menyesuaikan konfigurasi untuk melakukan koneksi ke database. File konfigurasi database bisa terdapat di app/config/database.php.

Laravel versi 4 mendukung catur bentuk database: sqlite, mysql, postgresql, dan SQL Server. Sesuai database yang Anda gunakan (yang saya yakin 99% adalah MySQL), silakan edit asma database, username, dan password.

Konfigurasi saya datang seperti di bawah ini:

...
	'connections' => array(

...

		'mysql' => array(
			'driver'    => 'mysql',
			'host'      => 'localhost',
			'database'  => 'laravel-sample',
			'username'  => 'root',
			'password'  => 'root',
			'charset'   => 'utf8',
			'collation' => 'utf8_unicode_ci',
			'prefix'    => '',
		),
...

Interaksi ke database

Ok, setelah database siap, saatnya kita beraksi. Pada prinsipnya laravel menyediakan tiga buah aturan untuk berhubung denga basis data:

  1. Raw Query

  2. Query Builder

  3. Eloquent ORM

Cara mula-mula tidak dianjurkan, aturan kedua boleh dilakukan, dan aturan ketiga adalah yang paling umum digunakan. Kecuali Anda sudah cukup sakti dan ada argumen kuat, acap gunakan aturan yang ketiga. Kenapa? Hmm, saat ini percaya saja dulu. Nanti kita bahas bertambah lanjut di tulisan lainnya ;)

Raw Query

Untuk melaksanakan query ke database, kita bisa memakai class DB yang sudah tersedia. Sebagai contoh, memakai table post di atas, kita bisa melaksanakan query sebagai berikut:

// select
$posts = DB::select('select * from post');
foreach ($posts aksis $post) 
    echo $post->title . '<br>';


// select query dengan parameter
$posts = DB::select('select * from post where status = ?', array('publish'));
foreach ($posts aksis $post) 
    echo $post->title . '<br>';


// insert
DB::update('insert into post(title, content) values (?, ?)', array('Postingan baru', 'Konten aktual bro'));

// update
DB::update('update post set content = ? where id = ?', array('Update postingan baru', 4));

// delete
$deletedCount = DB::delete('delete from post where comment_count = 0');
echo $deletedCount;

// general statement
DB::statement('alter table post add column created datetime null');

// transaction
DB::transaction(function()
    ...query 1
    ...query 2
);

Yang harus diperhatikan adalah, kita bisa melaksanakan binding parameter dengan memakai aksara ‘?’ pada query, kemudian kita tambahkan parameter kedua berupa array yang berisi value yang ingin kita passing. Ingat, antrean penggantian yang dilakukan sesuai dengan antrean aksara ‘?’. Jadi, aksara ‘?’ mula-mula akan digantikan dengan elemen array pertama, dan seterusnya.

Query Builder

Jika Anda pernah memakai Code Igniter sebelumnya, selamat, absolut Anda amat familiar dengan query builder (kalau di CI biasa disebut dengan Active Record). Query builder menyediakan aturan yang bertambah nyaman dan konsisten untuk melaksanakan query ke database. Lebih nyaman karena aba-aba jadi bertambah eco ditulis dan dibaca, bertambah konsisten karena Anda tidak harus membahayakan perbedaan native query yang mungkin siap antara bentuk database yang ahad dengan yang lain. Sekali Anda memakai query builder, maka query dijamin bepergian dengan baik di sarwa database yang didukung oleh laravel.

Masih memakai contoh tabel post di atas, kita bisa melaksanakan beragam macam query sebagai berikut:

// select multiple row
$posts = DB::table('post')->get();
foreach ($posts aksis $post) 
    echo $post->title . '<br>';


// select ahad row
$post = DB::table('post')->where('id', 1)->first();

// select artikel tertentu
$post = DB::table('post')->select('id', 'title')->where('id', 1)->first();
// ekivalen dengan query berikut
//$post = DB::table('post')->select(array('id', 'title'))->where('id', 1)->first();

// select ahad kolom
$lastArticleTitle = DB::table('post')->orderBy('id', 'desc')->pluck('title');
echo 'Judul artikel terakhir: ' . $lastArticleTitle . '<br>';

$query = DB::table('post')->addSelect('id');
$query->addSelect('title');
$query->where('status', 'publish');
$query->where('id', '>', 1);

$posts = $query->get();

$posts = DB::table('post')->skip(1)->take(1)->get();

Eloquent ORM

Jika Anda perhatikan ala dua aturan sebelumnya, kembalian dari query yang dihasilkan baik oleh Raw Query maupun Query Builder ialah sama-sama StdClass Object. Perhatikan balik contoh contoh berikut:

// raw query
$posts = DB::select('select * from post');

// query builder
$posts = DB::table('post')->get();

Kedua query di atas sama-sama menghasilkan array yang elemennya bertipe stdClass (stdClass ialah kelas bawaan PHP, biasanya digunakan untuk membuat obyek sederhana yang cuma berisi setter dan getter).

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [title] => Halo bro
            [content] => content 1
            [comment_count] => 2
            [status] => publish
            [created] =>
        )

    [1] => stdClass Object
        (
            [id] => 2
            [title] => Basic Routing
            [content] => content 2
            [comment_count] => 10
            [status] => publish
            [created] =>
        )

    [2] => stdClass Object
        (
            [id] => 3
            [title] => Nested Layout Menggunakan Blade
            [content] => content 3
            [comment_count] => 1
            [status] => draft
            [created] =>
        )
)

Bagaimana jika kita ingin membarui stdClass dengan Kelas buatan sendiri, apakah bisa?

Nah, itulah salah ahad peran ORM (Object Relational Mapper), yaitu memetakan hasil query dari database ke pada bentuk obyek yang sudah kita definisikan sebelumnya. Bentuk yang sudah kita definisikan sebelumnya ini biasa disebut dengan Model (M dari MVC).

Mengambil contoh tabel post di atas, kita ingin agar hasil query dari tabel tersebut dipetakan jadi obyek acuan Post. Untuk itu kita kudu definisikan dulu acuan Post. Buat sebentuk file aktual app/models/Post.php:

<?php

class Post extends Eloquent 

    protected $table = 'post';


Setiap acuan yang kita bikin kudu meng-extends kelas Eloquent bawaan laravel. Eloquent seorang diri artinya kurang bertambah ‘elok nian’ :P

Selanjutnya kita bisa melaksanakan beragam macam query melalui ORM.

Mendapatkan sarwa row:

Mendapatkan ahad row berdasar primary key:

$singlePost = Post::find(1);
echo '<pre>';
print_r($singlePost);
echo '</pre>';

Kode di atas akan menghasilkan:

Post Object
(
    [table:protected] => post
    [connection:protected] =>
    [primaryKey:protected] => id
    [perPage:protected] => 15
    [incrementing] => 1
    [timestamps] => 1
    [attributes:protected] => Array
        (
            [id] => 1
            [title] => Halo bro
            [content] => content 1
            [comment_count] => 2
            [status] => publish
            [created] =>
        )

Coba perhatikan, sekarang kita sudah mendapatkan Post Object, bukan lagi stdClass Object seperti sebelumnya. Itu berarti, jika kita menambahkan ciri atau guna apapun di kelas Post yang sudah kita bikin, maka ciri dan guna tersebut jua bisa dipanggil oleh obyek-obyek yang dihasilkan dari hasil query.

Buka balik file app/models/Post.php, lalu modifikasi seperti berikut ini:

<?php

class Post extends Eloquent 

    protected $table = 'post';
    public $newAttribute = 'new attribute';

    public function url()
    
        return 'http:://www.domain.com/post/' . $this->id;
    


Maka kita bisa memanggil ciri dan guna tersebut seperti berikut ini:

$singlePost = Post::find(1);
echo $singlePost->newAttribute; // output: 'new attribute'
echo '<br>';
echo $singlePost->url(); // output: 'http://www.domain.com/post/1'

Semua guna yang ada di Query Builder bisa dipakai untuk melaksanakan query via ORM.

$posts = Post::where('status', 'publish')->get();

Insert, Update, Delete

Untuk menambahkan record aktual ke database, caranya cukup sederhana:

  1. Buat obyek baru
  2. Set atribut-atributnya
  3. Panggil guna save()

Mari kita amat-amati contohnya:

$newPost = new Post;
$newPost->title = 'Yeah, Laravel engku nge-jazz';
$newPost->content = 'Pharetra Elit Condimentum Ligula Sem';
$newPost->status = 'draft';
$newPost->save();

Jalankan aba-aba di atas, dan tadaaaa…. error kan?

Exception
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'updated_at' in 'field list' (SQL: insert into `post` (`title`, `content`, `status`, `updated_at`, `created_at`) values (?, ?, ?, ?, ?)) (Bindings: array ( 0 => 'Yeah, Laravel engku nge-jazz', 1 => 'Pharetra Elit Condimentum Ligula Sem', 2 => 'draft', 3 => '2013-10-12 08:03:01', 4 => '2013-10-12 08:03:01', ))

Secara default, Eloquent memerlukan dua artikel adendum untuk saban tabel, yaitu updated_at dan created_at, yang akan digunakan untuk mencatat tempo insert dan tempo update ala otomatis. Untuk itu, tambahkan kedua artikel tersebut di tabel post Anda, keduanya bertipe datetime.

Jalankan balik aba-aba di atas, dan cek database Anda: Record aktual sudah ditambahkan, afdal dengan info akan kapan record tersebut di-insert.

Untuk melaksanakan update di row tertentu, caranya jua amat sederhana:

$post = Post::find(1);
$post->title = 'New Title';
$post->save();

Cek balik table post Anda, perhatikan record dengan id = 1, apakah title-nya berubah? Apakah artikel updated_at sudah terisi ala otomatis?

Sedangkan untuk basmi row tertentu, Eloquent sudah menyediakan guna delete():

// basmi ahad row via obyek
$post = Post::find(2);
$post->delete();

// basmi banyak row sekaligus
Post::where('status', 'draft')->delete();

Kesimpulan

Yup, sekarang kita sudah bisa melaksanakan query ke database memanfaatkan fitur-fitur yang sudah disediakan oleh laravel. Dari ketiga aturan tersebut, memakai ORM ialah aturan yang paling direkomendasikan karena bertambah fleksibel, aba-aba bertambah terorganisir dan mudah dipahami, dan tentunya bertambah OOP.

Tetapi terkadang siap kasus dimana ORM ada kelemahan, terutama pada segi performansi, yaitu kala berangkaian dengan bahan yang amat banyak (jutaan row). Untuk kasus tersebut, Anda acap ada pilihan untuk memakai dua metode lainnya.

Kalau saya pribadi, acap gunakan ORM, hingga suatu saat aplikasi terasa lambat, aktual dilakukan optimasi :D.

oke pembahasan perihal Interaksi Dengan Database semoga info ini berfaedah terima kasih

Artikel ini diposting pada label , tanggal 25-08-2019, di kutip dari https://id-laravel.com/post/interaksi-dengan-database

Related Posts

Post a Comment