Ads 970x90

List Labels

iklan banner

Newsletter

Interaksi Dengan Database Mysql Laravel Hitung Jumlah

Post a Comment

Interaksi Dengan Database

Hallo, selamat pagi, sesi kali ini akan membawakan mengenai mysql laravel hitung jumlah Interaksi Dengan Database simak selengkapnya 

Pada tulisan sebelumnya kita telah bersama-sama membuat jerambah web pertama dengan laravel. Satu buah jerambah sederhana yang hanya menampilkan sebuah tulisan “halo, bro”. Pada kenyataannya, ketika kita membangun sebentuk website, data yang ditampilkan bukan hanya sekedar tulisan “halo, bro”, tetapi merupakan data real yang berakar dari database. Oleh karena itu, ala tulisan ini kita akan bersama-sama berguru aturan apa} 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 andaikan Anda merasa layak malas buat membuat tablenya sendiri karena di bawah ini telah script sql-nya (ups, mysql only akur :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 selanjutnya ialah mencocokkan konfigurasi untuk melakukan koneksi ke database. File konfigurasi database bisa terdapat di app/config/database.php.

Laravel adaptasi 4 mendukung empat bentuk database: sqlite, mysql, postgresql, dan SQL Server. Sesuai database yang Anda gunakan (yang abdi benar-benar percaya 99% adalah MySQL), silakan edit nama database, username, dengan password.

Konfigurasi abdi terlihat bagai 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 cara buat berhubung denga basis data:

  1. Raw Query

  2. Query Builder

  3. Eloquent ORM

Cara pertama tak dianjurkan, cara kedua boleh dilakukan, dengan cara ketiga adalah yang paling umum digunakan. Kecuali Anda telah layak sakti dengan memiliki alasan kuat, acap gunakan cara yang ketiga. Kenapa? Hmm, saat ini beriktikad sahaja dulu. Nanti kita bahas lebih lanjut di tulisan lainnya ;)

Raw Query

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

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


// select query dengan parameter
$posts = DB::select('select * from post where kapasitas = ?', array('publish'));
foreach ($posts as $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 melakukan binding parameter dengan memakai karakter ‘?’ pada query, kemudian kita tambahkan parameter kedua berupa array yang berisi value yang embuh kita passing. Ingat, antrean penggantian yang dilakukan sesuai dengan antrean karakter ‘?’. Jadi, karakter ‘?’ pertama akan digantikan dengan elemen array pertama, dengan 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 cara yang lebih nyaman dengan konsisten buat melakukan query ke database. Lebih nyaman karena kode jadi lebih eco ditulis dengan dibaca, lebih konsisten karena Anda tak harus membahayakan antagonisme native query yang mungkin siap antara bentuk database yang satu dengan yang lain. Sekali Anda memakai query builder, maka query dijamin berjalan dengan apik di sarwa database yang didukung oleh laravel.

Masih memakai sampel bagan post di atas, kita bisa melakukan berbagai ala query sebagai berikut:

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


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

// select kolom 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 satu 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 dobel cara sebelumnya, kembalian dari query yang dihasilkan apik oleh Raw Query atau Query Builder ialah saling StdClass Object. Perhatikan balik sampel contoh berikut:

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

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

Kedua query di atas saling menghasilkan array yang elemennya bertipe stdClass (stdClass ialah aras bawaan PHP, biasanya digunakan buat membuat obyek sederhana yang hanya berisi setter dengan 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 andaikan kita embuh mengganti stdClass dengan Kelas buatan sendiri, apakah bisa?

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

Mengambil sampel bagan post di atas, kita embuh biar hasil query dari bagan tersebut dipetakan jadi obyek acuan Post. Untuk itu kita harus 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 harus meng-extends aras Eloquent bawaan laravel. Eloquent sendiri artinya kurang lebih ‘elok nian’ :P

Selanjutnya kita bisa melakukan berbagai ala query melalui ORM.

Mendapatkan sarwa row:

Mendapatkan satu 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 telah membaca Post Object, bukan lagi stdClass Object bagai sebelumnya. Itu berarti, andaikan kita menambahkan ciri atau fungsi apapun di aras Post yang telah kita bikin, maka ciri dengan fungsi tersebut jua bisa dipanggil oleh obyek-obyek yang dihasilkan dari hasil query.

Buka balik file app/models/Post.php, arkian modifikasi bagai 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 mendatangkan ciri dengan fungsi tersebut bagai 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 fungsi yang tersedia di Query Builder bisa dipakai buat melakukan query dengan ORM.

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

Insert, Update, Delete

Untuk menambahkan record aktual ke database, caranya layak sederhana:

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

Mari kita lihat contohnya:

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

Jalankan kode di atas, dengan tadaaaa…. error kan?

Exception
SQLSTATE[42S22]: Column titinada 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 dobel kolom tambahan buat saban tabel, yaitu updated_at dengan created_at, yang akan digunakan buat mencatat waktu insert dengan waktu update secara otomatis. Untuk itu, tambahkan kedua kolom tersebut di bagan post Anda, keduanya bertipe datetime.

Jalankan balik kode di atas, dengan cek database Anda: Record aktual telah ditambahkan, lengkap dengan berita tentang kapan record tersebut di-insert.

Untuk melakukan 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 kolom updated_at telah terisi secara otomatis?

Sedangkan buat basmi row tertentu, Eloquent telah menyediakan fungsi delete():

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

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

Kesimpulan

Yup, sekarang kita telah bisa melakukan query ke database memanfaatkan fitur-fitur yang telah disediakan oleh laravel. Dari ketiga cara tersebut, memakai ORM ialah cara yang paling direkomendasikan karena lebih fleksibel, kode lebih terorganisir dengan mudah dipahami, dengan tentunya lebih OOP.

Tetapi terkadang siap kasus dimana ORM memiliki kelemahan, lebih-lebih pada segi performansi, yaitu ketika berhubungan dengan data yang amat banyak (jutaan row). Untuk kasus tersebut, Anda acap memiliki pilihan buat memakai dobel metode lainnya.

Kalau abdi pribadi, acap gunakan ORM, batas satu saat aplikasi terasa lambat, aktual dilakukan optimasi :D.

oke penjelasan tentang Interaksi Dengan Database semoga tulisan ini menambah wawasan salam

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