Belajar Laravel (Chapter 5 | Tutorial Database )

Tobi Ahmad
dotlocal
Published in
3 min readApr 6, 2020

Laravel memudahkan kita pada proses penggunaan database SQL, Laravel mendukung 4 database berikut :

  1. MySQL
  2. Postgres
  3. SQLite
  4. SQL Server

Proses query pada database di Laravel bisa menggunakan raw SQL, Query Builder dan Eloquent ORM. Laravel mendukung pembuatan database melalui koding seperti terdapat fitur migrations dan seeding, atau menghubungkan database yang sudah dibuat sebelumnya.

Scope of This Chapter

Pada chapter ini kita akan membahas tentang Database pada Laravel.

Config Database

Semua konfigurasi database pada Laravel terletak pada file config/database.php, semua config database terdapat di file ini, bisa kita lihat pada key connections terdapat config untuk database sqlite, mysql, pgsql, sqlsrv, kita bisa menambahkan key baru seperti mysql2.

Contoh jika kita menggunakan database MySQL

// Buka file config/database.phpmysql’ => [
‘driver’ => ‘mysql’,
‘url’ => env(‘DATABASE_URL’),
‘host’ => env(‘DB_HOST’, ‘127.0.0.1’),
‘port’ => env(‘DB_PORT’, ‘3306’),
‘database’ => env(‘DB_DATABASE’, ‘forge’),
‘username’ => env(‘DB_USERNAME’, ‘forge’),
‘password’ => env(‘DB_PASSWORD’, ‘’),
‘unix_socket’ => env(‘DB_SOCKET’, ‘’),
‘charset’ => ‘utf8mb4’,
‘collation’ => ‘utf8mb4_unicode_ci’,
‘prefix’ => ‘’,
‘prefix_indexes’ => true,
‘strict’ => true,
‘engine’ => null,
‘options’ => extension_loaded(‘pdo_mysql’) ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env(‘MYSQL_ATTR_SSL_CA’),
]) : [],
],

Bisa kita lihat DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD di database.php diambil dari variable env yang bisa diedit, serta key driver value-nya mysql.

// Buka file .envDB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

Raw SQL Queries

Setelah selesai konfigurasi koneksi database, kita bisa query menggunakan DB facade. DB facede mendukung method seperti select, update, insert, delete dan statement.

Select Query

<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class PostController extends Controller
{
/**
* Menampilkan semua post.
*
* @return Response
*/
public function index()
{
$posts = DB::select(‘select * from posts where publish = ?’, [1]);
return view(‘post.index’, [‘posts’ => $posts]);
}
}

pada method select() ada 2 argument:

  1. select * from posts where publish = ? : raw query SQL yang terdapat binding ? jika ingin menambahkan dynamic parameter.
  2. [1] :Parameter binding yang diisi dengan nilai yang digunakan.

akan menghasilkan perintah SQL berikut :

select * from posts where publish = 1

select method selalu menghasilkan array, item pada array akan menjadi objec PHP stdClass, untuk mengaksesnya bisa dengan syntax berikut:

foreach ($posts as $post) {
echo $post->title;
}

Using Named Bindings

$results = DB::select(‘select * from posts where id = :id’, [‘id’ => 1]);

Kita bisa menggunakan name binding pada raw query.

Insert Query

DB::insert(‘insert into posts (id, title, content) values (?, ?, ?)’, [1, ‘Jakarta today’, ‘Jakarta lockdown’]);

menggunakan insert method yang terdapat dua argument, yang pertama raw query, yang kedua value column.

Update Query

DB::update(‘update posts set category_id = ? where id = ?’, [3,1]);

menggunakan method update.

Delete Query

DB::delete(‘delete from posts where id = ?’, [1]);

General Statement

DB::statement(‘drop table posts’);

Raw query biasanya saya gunakan untuk menjalankan query yang susah dihandle oleh Eloquent Model dan pada project seperti Lumen untuk performance yang lebih baik.

Next Chapter

Database Transactions : https://medium.com/dotlocal/belajar-laravel-chapter-6-tutorial-database-transactions-1ec500ba840f

Support the Author

Jika suka dengan artikel ini, bisa support saya ditautan berikut ini https://karyakarsa.com/tobidsn :)

Cheers
Tobi Ahmad
Founder of Dot Local

--

--

Tobi Ahmad
dotlocal

Web Developer, Blogger, & Open source enthusiast.