Laravel - Using Database
Hai semuanya, di materi study kasus kali ini kita akan membahas tentang menggunakan Database pada project Laravel. Diantaranya
- Setup and Configure connection to Database
- Database: Migration
- Basic CRUD using fluent query builder
- Deploy Manualy ke Server
- Build & Running Docker Image
- Cleanup
Ok langsung aja kita ke pembahasan yang pertama
Setup and Configure connection to Database
Almost every modern web application interacts with a database. Laravel makes interacting with databases extremely simple across a variety of supported databases using raw SQL, a fluent query builder, and the Eloquent ORM. Currently, Laravel provides first-party support for four databases:
- MySQL
5.7+
- PostgreSQL
9.6+
- SQLite
3.8.8+
- SQL Server
2017+
Sebagai study kasus kali ini kita akan menggunakan database MySQL 5.7 yang akan saya jalankan menggunakan docker seperti berikut:
For Bash script:
For Powershell script:
The configuration for Laravel’s database services is located in your application’s config/database.php
configuration file. Most of the configuration options within this file are driven by the values of your application’s environment variables
Kita edit file .env
menjadi seperti berikut:
Setelah itu kita bisa check connectionnya menggunakan perintah
Jika dijalankan maka hasilnya seperti berikut:
➜ docker-laravel git:(master) php artisan migrate:install
Migration table created successfully.
➜ docker-laravel git:(master) php artisan migrate:status
+------+------------------------------------------------+-------+
| Ran? | Migration | Batch |
+------+------------------------------------------------+-------+
| No | 2014_10_12_000000_create_users_table | |
| No | 2014_10_12_100000_create_password_resets_table | |
| No | 2019_08_19_000000_create_failed_jobs_table | |
+------+------------------------------------------------+-------+
➜ docker-laravel git:(master) php artisan migrate
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (34.42ms)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (26.96ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (28.19ms)
➜ docker-laravel git:(master) php artisan migrate:status
+------+------------------------------------------------+-------+
| Ran? | Migration | Batch |
+------+------------------------------------------------+-------+
| Yes | 2014_10_12_000000_create_users_table | 1 |
| Yes | 2014_10_12_100000_create_password_resets_table | 1 |
| Yes | 2019_08_19_000000_create_failed_jobs_table | 1 |
+------+------------------------------------------------+-------+
Dengan konfigurasi seperti berikut, kita sudah bisa connect antara PHP Laravel dengan Database MySQL v5.7
Database: Migration
Migrations are like version control for your database, allowing your team to define and share the application’s database schema definition. The new migration will be placed in your database/migrations
directory. Each migration filename contains a timestamp that allows Laravel to determine the order of the migrations:
Seperti berikut
Selanjutnya kita akan mengisi table mahasiswa
menggunakan Seeder, untuk membuat seeder kita bisa menggunakan perintah seperti berikut:
Seperti berikut:
Dan kita edit file database/seeders/DatabaseSeeder.php
seperti berikut:
Selanjutnya kita jalankan perintah berikut:
Kemudian coba check data di table mahasiswa
, sekarang memiliki data seperti berikut contohnya:
Ok sekarang kita sudah success membuat database migration
Basic CRUD using fluent query builder
Setelah kita setup connection dan membuat migration table, sekarang kita buat simple CRUD yang di expose lewat Rest API. Sekarang kita buat controller baru menggunakan perintah seperti berikut:
Seperti berikut:
Kemudian tambahkan config route seperti berikut pada file routes/api.php
:
Untuk melakukan testing kita buat file tests/MahasiswaDbControler.http
seperti berikut:
Setelah semuanya berjalan dengan baik, sekarang kita bisa buat UInya dengan membuat file pada folder resources/views
misalnya dengan nama mahasiswa.blade.php
seperti berikut:
Tambahkan juga dependency pada client yaitu jquery-serializejson
dengan perintah seperti berikut:
Dan yang terakhir tambahakan route untuk viewnya pada file routes/web.php
seperti berikut:
Jika dijalankan dengan perintah seperti berikut:
Kemudian akses dari browser dengan alamat localhost:8000/db maka hasilnya seperti berikut:
Deploy Manualy ke Server
Setelah kita mendevelop feature CRUD ke Database MySQL di local kita, sekarang kita akan deploy ke Server. Jadi workflownya
- Install Database MySQL
- Create User & Database
- Upload source-code terbaru ke folder
/var/www/php
- Update configuration
.env
- Install PHP Extension
mysqli
,pdo_mysql
- Jalankan perintah
php artisan migrate
- Jalankan perintah
npm install && npm run-script prod && rm -rf node_modules
- Restart service
apache2
Untuk installasi MySQL Database kita bisa install manual atau menggunakan Docker, jadi supaya simple kita buat di docker aja dengan menggunakan perintah yang tadi yaitu seperti berikut:
Setelah itu install PHP Extension untuk module mysql-client
dan pdo_mysql
seperti berikut perintahnya:
Kemudian kita upload source-code terbaru dengan menggunakan perintah:
Setelah itu kita install kita lakukan migrate mengunakan perintah
Sekarang kita bisa coba akses, hasilnya seperti berikut:
Build & Running Docker Image
Ok setelah kita deploy cara manual sekarang kita build Docker imagenya, pertama kita akan update dulu file Dockerfile
seperti berikut:
Jadi karena saya mau semua proses dilakukan automatis mulai deploy, migrate database. Kita akan modifikasi entrypoint dan command dalam Dockerfile
, Kita download dulu file apache2-foreground dari source-code docker-library php github repository. Kemudian edit dan simpan dalam folder .docker/apache2-foreground
menjadi seperti berikut:
Setelah itu kita build dengan perintah seperti berikut:
Jika dijalankan maka hasilnya seperti berikut:
➜ docker-laravel git:(master) docker build -t dimmaryanto93/docker-laravel:2021.07.26.21.59-release .
[+] Building 49.0s (25/25) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 2.24kB 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 35B 0.0s
=> [internal] load metadata for docker.io/library/node:14.15-alpine3.13 2.8s
=> [internal] load metadata for docker.io/library/php:8.0-apache 2.9s
=> [auth] library/node:pull token for registry-1.docker.io 0.0s
=> [auth] library/php:pull token for registry-1.docker.io 0.0s
=> [php_laravel 1/4] FROM docker.io/library/php:8.0-apache@sha256:bc3bf769aff70e8f8183f087d9d855b492826aa94052c1 0.0s
=> [frontend_builder 1/4] FROM docker.io/library/node:14.15-alpine3.13@sha256:03b86ea1f9071a99ee3de468659c9af95c 0.0s
=> [internal] load build context 0.1s
=> => transferring context: 261.21kB 0.1s
=> CACHED [php_laravel 2/4] RUN apt-get update && apt-get install -y curl git libicu-dev libpq-dev lib 0.0s
=> CACHED [php_laravel 3/4] RUN pecl install mcrypt-1.0.4 && docker-php-ext-install fileinfo exif pcntl bcmath 0.0s
=> CACHED [php_laravel 4/4] RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --fi 0.0s
=> CACHED [stage-2 1/9] WORKDIR /var/www/php 0.0s
=> CACHED [stage-2 2/9] RUN sed -i "s|DocumentRoot /var/www/html|DocumentRoot /var/www/php/public|g" /etc/apache 0.0s
=> [stage-2 3/9] COPY . . 0.2s
=> CACHED [frontend_builder 2/4] WORKDIR /var/www/php 0.0s
=> [frontend_builder 3/4] COPY . . 0.1s
=> [frontend_builder 4/4] RUN npm install -q && npm run-script prod 33.3s
=> [stage-2 4/9] COPY --from=frontend_builder /var/www/php/public/css public/css 0.1s
=> [stage-2 5/9] COPY --from=frontend_builder /var/www/php/public/images public/images 0.0s
=> [stage-2 6/9] COPY --from=frontend_builder /var/www/php/public/fonts public/fonts 0.0s
=> [stage-2 7/9] COPY --from=frontend_builder /var/www/php/public/js public/js 0.1s
=> [stage-2 8/9] RUN mkdir -p public/storage && chmod -R 777 storage/* && chmod -R 777 public/storage 0.3s
=> [stage-2 9/9] RUN php -r "file_exists('.env') || copy('.env.example', '.env');" && composer install --no 11.5s
=> exporting to image 0.5s
=> => exporting layers 0.4s
=> => writing image sha256:73971e5fd98f5d36abe234f80e113662d4972a85d707525a9d8a50d26892cfff 0.0s
=> => naming to docker.io/dimmaryanto93/docker-laravel:2021.07.26.21.59-release
Sekarang kita coba jalankan containernya dengan perintah seperti berikut:
Jika dijalankan maka hasilnya seperti berikut:
➜ ~ docker run --name apache-laravel `
>> --network laravel_net `
>> -e DB_HOST=mysql `
>> -e DB_PORT=3306 `
>> -e DB_DATABASE=docker_laravel `
>> -e DB_USERNAME=docker_laravel `
>> -e DB_PASSWORD=docker_laravel `
>> -p 80:80 `
>> -d dimmaryanto93/docker-laravel:2021.07.26.21.59-release
948bf7accb15f96dd4022346142db41950c493687775eeb98ab2ff688b6f3553
➜ ~ docker logs apache-laravel
Configuration cache cleared!
Application cache cleared!
Configuration cache cleared!
Configuration cached successfully!
Route cache cleared!
Routes cached successfully!
Files cached successfully!
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (29.53ms)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (27.60ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (41.36ms)
Migrating: 2021_07_26_113952_create_mahasiswa_table
Migrated: 2021_07_26_113952_create_mahasiswa_table (62.10ms)
AH00558: apache2: Could not reliably determine the server''s fully qualified domain name, using 172.18.0.3. Set the 'ServerName' directive globally to suppress this message
[Mon Jul 26 16:49:51.153897 2021] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.38 (Debian) PHP/8.0.8 configured -- resuming normal operations
[Mon Jul 26 16:49:51.153987 2021] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
Sekarang coba akses dari browser, maka hasilnya seperti berikut:
Cleanup
Seperti biasa setelah kita mencoba schenario studi kasus tersebut. sekarang kita bersih-bersih dulu ya berikut perintahnya:
For Bash script:
For Powershell script:
Yuk simak juga videonya,
Dan jika temen-temen belajar hal baru kali ini jangan lupa buat Like, Subcribe, dan Share ke temen kalian. Terimakasih!!!
-
Referensi
https://docs.docker.com/
https://laravel.com/docs/8.x/database
https://laravel.com/docs/8.x/queries
https://laravel.com/docs/8.x/migrations
https://laravel.com/docs/8.x/seeding#introduction
https://laravel.com/docs/8.x/controllers#introduction
https://laravel.com/docs/8.x/queries#introduction