Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Web Apps

Menggunakan Database Illuminate dengan Eloquent di Aplikasi PHP Anda Tanpa Laravel

by
Difficulty:IntermediateLength:LongLanguages:

Indonesian (Bahasa Indonesia) translation by ⚡ Rova Rindrata (you can also view the original English article)

Illuminate adalah mesin database Laravel, minus Laravel. Ini dilengkapi dengan ORM Eloquent di Laravel. Jika Anda ingin membuat aplikasi PHP Anda dengan ORM dan memilih untuk tidak menggunakan Laravel, tutorial ini untuk Anda.

Dalam tutorial ini, kita akan membangun back end untuk Applikasi T&J dengan PHP, Database Illuminate, dan ORM Eloquent.

Dependensi Proyek

  1. PHP: 5.5+
  2. MYSQL
  3. Composer

Kemampuan Aplikasi

Aplikasi kita akan melakukan sepuluh tugas:

  • Menambahkan seorang pengguna.
  • Menambahkan sebuah pertanyaan.
  • Menambahkan jawaban untuk sebuah pertanyaan.
  • Upvote sebuah jawaban.
  • Mendapatkan sebuah pertanyaan dengan jawaban.
  • Mendapatkan semua pertanyaan dan pengguna yang menanyakannya.
  • Mendapatkan pertanyaan, jawaban, dan upvote tertentu.
  • Menghitung pertanyaan oleh pengguna tertentu.
  • Memperbarui jawaban oleh pengguna.
  • Menghapus sebuah pertanyaan.

Pertama, kita membuat direktori dan struktur proyek kita.

Dalam direktori proyek utama, kita akan membuat sebuah folder aplikasi, dan kemudian di folder aplikasi ini, kita akan membuat dua folder: model dan controller. Dalam gambar ini, folder proyek utama kita diberi nama eloquent. Anda bisa menggantinya dengan nama apapun yang Anda inginkan.

Our project organization

Selanjutnya, kita membuat file index.php di folder proyek utama, pada tingkat yang sama seperti folder aplikasi.

Kita akan menggunakan git, jadi kita membuat file .gitignore. Perhatikan bahwa langkah ini bersifat opsional.

Selanjutnya, kita memasang dependensi yang dibutuhkan agar proyek ini bisa berjalan. Di folder proyek utama, kita akan membuat file composer.json.

Untuk menginstal database Illuminate, kita menambahkan ini ke composer.json kita:
“illuminate/database”: “5.1.8”,.

Selanjutnya, tambahkan psr-4 autoloading untuk Model dan controller kita:

Sekarang, file composer.json kita akan terlihat seperti ini:

Kita sekarang akan menjalankan dua perintah composer ini di lokasi yang sama dengan file composer.json kita:

Ini akan menghasilkan folder vendor yang bisa kita tambahkan ke gitignore (ini juga merupakan langkah opsional).

Mari menambahkan file konfigurasi untuk kredensial database kita.

Dalam direktori proyek utama, kita membuat sebuah file bernama config.php dan mendefinisikan rincian DB dalam file Config.php. Perhatikan bahwa nilainya harus diganti dengan rincian koneksi Anda sendiri.

Selanjutnya, kita membuat skema untuk aplikasi kita.

Satu hal yang perlu diperhatikan sebelum kita membuat skema untuk tabel dalam database kita adalah kita bisa menambahkan timestamp ke dalam skema kita.

ORM Eloquent mengharapkan dua kolom timestamp jika kita ingin mengaktifkan operasi timestamp pada tabel/model tertentu. Mereka adalah kolom created_at dan updated_at. Jika kita mengaktifkan timestamp untuk sebuah model, Eloquent secara otomatis memperbarui field ini dengan waktu saat kita membuat atau memperbarui sebuah record.

Ada kolom ketiga yang disebut deleted_at. Timestamp deleted_at bekerja secara berbeda, sungguh. Eloquent memiliki kemampuan penghapusan lembut yang menggunakan kolom deleted_at untuk menentukan apakah sebuah record telah dihapus. Jika Anda menghapus sebuah record dengan fungsi 'delete' dari eloquent dan Anda mengaktifkan Soft Delete, kolom akan diperbarui dengan waktu penghapusan. Item yang dihapus ini kemudian dapat diambil kapan saja.

Di aplikasi ini, kita akan memanfaatkan timestamp, jadi kita akan menggunakan ketiganya dalam pembuatan Skema kita.

Membuat tabel dengan perintah berikut di MySQL:

Pertanyaan

Jawaban

Upvote

Pengguna

Kita akan melanjutkan dengan membuat file untuk model dan controller untuk tabel kita di lokasi berikut:

  • project_folder/app/models/question.php
  • project_folder/app/models/answer.php
  • project_folder/app/models/upvote.php
  • project_folder/app/models/user.php
  • project_folder/app/models/database.php
  • project_folder/app/controllers/questions.php
  • project_folder/app/controllers/answers.php
  • project_folder/app/controllers/upvotes.php
  • project_folder/app/controllers/users.php

Buka models/database.php dengan editor.

Pertama kita membuat Capsule:

Pada file di atas, kita menginisialisasi dan mengatur kapsul dengan konstanta yang didefinisikan di config.php, dan kemudian kita boot eloquent.

Langkah selanjutnya adalah membuat skrip start. Ini akan menjadi file dimana segala sesuatu yang harus dijalankan sebelum aplikasi kita berjalan.

Kita membuat file start di lokasi project_folder/start.php, dan kemudian di file-nya, require file autoload Composer:

require ‘vendor/autoload.php’;

Setelah itu, kita require config.php untuk mendapatkan kredensial yang didefinisikan: require 'config.php';

Kemudian kita menginisialisasi kelas database.

Start.php Anda akan terlihat seperti ini:

Include start.php di index.php Anda karena ini akan menjadi file utama kita.

File index.php kita sekarang terlihat seperti ini:

Selanjutnya, kita bisa mulai mengerjakan controller dan model kita. Di project_folder/app/models/question.php, kita tambahkan ini:

Kemudian di project_folder/app/controllers/questions.php:

Di project_folder/app/controllers/answers.php, kita melakukan hal yang sama:

Tugas 1: Menambahkan Seorang Pengguna

Dalam model pengguna (project_folder/app/models/user.php), kita menambahkan kode berikut untuk menentukan namespace kita, memperpanjang Model Eloquent, dan menentukan nama tabel (protected $table) dan field apa di tabel dapat diisi dengan penciptaan massal (protected $fillable).

Di controller pengguna (project_folder/app/controllers/user.php), kita mendefinisikan namespace dan kelas kita seperti biasa:

Kemudian untuk membuat pengguna, di controller pengguna, kita mengimpor namespace Model pengguna, use Models\User;, lalu menambahkan fungsi untuk membuat pengguna.

Controller pengguna kita sekarang terlihat seperti ini.

Kemudian di index.php kita menambahkan baris ini dan menjalankan aplikasi untuk membuat user baru.

Tugas 2: Menambahkan sebuah Pertanyaan

Untuk menambahkan sebuah pertanyaan, kita mengimpor namespace model Question dalam controller pertanyaan, dan menulis fungsi create_question:

use Models\Question;

Kemudian:

Kita telah menggunakan model penciptaan massal Eloquent untuk menyisipkan record ini, tapi sebelum itu bekerja, kita perlu mengizinkan field tersebut menjadi bisa diisi, karena model Eloquent melindungi penciptaan massal secara default.

Jadi, kita pergi ke model question dan menambahkan properti protected $fillable ke kelas.

protected $fillable = ['question','user_id'];

Untuk menjalankan ini, impor controller pertanyaan di index.php dan panggil fungsi create_question secara statis:

use Controllers\Question;

Kemudian buat pertanyaan dengan pertanyaan dan User Id sebagai parameter:

$question = Questions::create_question("Have you ever met your doppelganger?",1);

Ini mengembalikan objek model jika berhasil.

Sekarang kita akan menjalankan skrip index.php dengan masukan yang berbeda untuk menambahkan lebih banyak pertanyaan ke database.

Tugas 3: Menambahkan Jawaban untuk Sebuah Pertanyaan

Pada model jawaban, kita mengulangi langkah-langkah yang diambil untuk model pertanyaan dan pengguna dengan menambahkan kode di bawah ini:

Kemudian di controller jawaban, kita menulis baris ini:

Kemudian di index.php, kita bisa membuat jawaban untuk pertanyaan dengan id 1 yang kita tambahkan tadi, dengan id user 2. Jangan lupa untuk mengimpor controller jawaban ke index.php terlebih dahulu.

Untuk mencegah banyak entri, komentari semua panggilan lainnya di index.php sebelum menjalankan yang baru.

Tugas 4: Upvote sebuah Jawaban

Ini adalah langkah yang hampir sama dengan yang kita gunakan.

Jadi kita akan menyalinnya ke model Upvote di project_folder/app/models/upvote.php.

Kemudian dalam controller jawaban, kita mengimpor namespace Model Upvote.

use Models\Upvote;

Kemudian kita membuat fungsi upvote_answer.

Di index.php, kita bisa memanggil fungsi tersebut dengan ID User dummy untuk upvote jawaban dengan id 1.

$upvote = Answers::upvote_answer(1,14);

Tugas 5: Mendapatkan sebuah Pertanyaan dengan Jawaban

Untuk tugas seperti ini, kita bisa menggunakan relasi dari Eloquent.

Jenis relasi mencakup one to one, one to many, many to many, dll.

Bila menggunakan relasi ini, Eloquent mengasumsikan sebuah foreign key dalam bentuk modelname_id ada pada model. Untuk tugas ini, relasinya adalah relasi one-to-many karena satu pertanyaan bisa memiliki sejumlah jawaban.

Pertama, kita mendefinisikan relasi ini dengan menambahkan fungsi ini ke model pertanyaan kita.

Kemudian pada controller pertanyaan, kita menulis sebuah fungsi untuk mendapatkan pertanyaan dengan jawaban.

Ini mengambil pertanyaan dengan jawaban yang sesuai.

Di index.php, kita mengomentari semua panggilan dan menjalankannya:

$all = Questions::get_questions_with_answers();

Kita bisa var_dump atau print_r variabel $all untuk melihat hasilnya.

Tugas 6: Mendapatkan Semua Pertanyaan dan Pengguna yang Menanyakannya

Ini adalah relasi one to one karena satu pertanyaan memiliki satu pengguna, jadi kita menambahkannya ke model pertanyaan.

Kemudian kita membuat fungsi dalam controller pertanyaan dan menggunakan fungsi with pada model pertanyaan.

Di index.php, komentari semua yang lain dan jalankan ini:

$all_with_users = Questions::get_questions_with_users();

Tugas 7: Mendapatkan sebuah Pertanyaan dengan Jawaban dan Upvote

Pertama, kita mendefinisikan relasi antara jawaban dan upvote. Sebuah jawaban memiliki banyak upvote, jadi relasinya one to many.

Jadi, kita menambahkan fungsi berikut ke model jawaban kita:

Kemudian pada controller pertanyaan, kita membuat fungsi untuk mendapatkan ini:

Seperti pada langkah sebelumnya, kita mengomentari semua panggilan lainnya ke index.php dan menjalankan ini:

$one_question = Questions::get_question_answers_upvotes(1);

Kita bisa mencetak variabel $one_question untuk melihat hasilnya.

Tugas 8: Menghitung Pertanyaan oleh Pengguna Tertentu

Pertama, kita mengimpor model pertanyaan di controller pengguna:

use Models\Question;

Kemudian kita menulis fungsi ini:

Di index.php, kita memberi komentar pada panggilan lainnya dan menambahkan baris ini:

$user_question_count = Users::question_count(1);

Ini mengembalikan integer yang merupakan jumlah pertanyaan yang telah ditambahkan oleh pengguna dengan id 1.

Kita dapat mencetak variabel $user_question_count dan menjalankan index.php untuk melihat hasilnya.

Tugas 9: Memperbarui Jawaban oleh Pengguna

Konsep pembaruan dengan ORM Eloquent cukup sederhana. Pertama kita cari sebuah record, lalu kita bermutasi dan menyimpan.

Sekarang, dalam controller jawaban, kita menambahkan fungsi ini:

Di index.php, kita bisa mengomentari semua panggilan lainnya, dan memperbarui jawaban dengan id 1 seperti ini:

$update_answer = Answers::update_answer(1,”This is an updated answer”);

Ini mengembalikan nilai boolean—true—jika pembaruan berhasil.

Tugas 10: Menghapus sebuah Pertanyaan (Soft Delete)

Dalam tugas akhir ini, kita akan menerapkan SoftDelete Eloquent.

Pertama, kita memberi tahu model pertanyaan untuk menggunakan SoftDeletes dengan mengimpor namespace SoftDeletes, dan kemudian menggunakan sifat SoftDeletes di kelas kita.

use Illuminate\Database\Eloquent\SoftDeletes;

Kemudian setelah baris deklarasi kelas, kita menambahkan baris ini:

use SoftDeletes;

Kemudian kita menambahkan deleted_at ke properti protected $dates untuk model tersebut. Ini adalah langkah yang diperlukan.

protected $dates = [‘deleted_at’];

Model pertanyaan kita sekarang terlihat seperti ini:

Kemudian kita membuat fungsi delete_question pada controller pertanyaan.

Jalankan di index.php:

$delete = Questions::delete_question(1);

Selamat! Anda baru saja membangun back end yang berfungsi penuh dengan Illuminate dan Eloquent. Dan kita tidak perlu menulis begitu banyak kode untuk mencapai semua ini.

Kode untuk tutorial ini dapat ditemukan di GitHub.

Kesimpulan

Illuminate juga dilengkapi dengan Query Builder yang dapat Anda gunakan untuk kueri database yang lebih kompleks dan pasti sesuatu yang ingin Anda coba dan gunakan di aplikasi Anda.

Satu-satunya yang hilang dalam Database Illuminate yang berdiri sendiri adalah migrasi database, yang merupakan fitur indah dari Laravel, dan Lumen, microframework oleh Laravel. Anda harus mempertimbangkan untuk menggunakan keduanya di aplikasi Anda untuk memanfaatkan fitur berguna yang menyertainya.

Anda dapat mengetahui lebih lanjut tentang Eloquent di Halaman Dokumentasi Resmi Eloquent.

Referensi

Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.