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

Menggunakan Penerang Database Dengan Eloquent dalam App PHP Anda Tanpa Laravel

by
Difficulty:IntermediateLength:LongLanguages:

Malay (Melayu) translation by Meyria (you can also view the original English article)

Illuminate adalah enjin pangkalan data Laravel yang dikurangkan oleh Laravel. Ia datang bersama dengan ORM Eloquent di Laravel. Jika anda ingin membina aplikasi PHP anda dengan ORM dan memilih untuk tidak menggunakan Laravel, tutorial ini adalah untuk anda.

Dalam tutorial ini, kami akan membina hujung belakang untuk App Q&A dengan PHP, Pangkalan Data Bercahaya, dan ORM Eloquent.

Projek Kebergantungan

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

Keupayaan App

Aplikasi kami akan melakukan tugasan sepuluh:

  • Tambah pengguna.
  • Tambah soalan.
  • Menambah jawapan kepada soalan.
  • Ganti jawapan.
  • Dapatkan soalan dengan jawapan.
  • Dapatkan semua soalan dan pengguna yang bertanya kepada mereka.
  • Dapatkan soalan, jawapan, dan upvotes tertentu.
  • Kirakan soalan oleh pengguna tertentu.
  • Kemas kini jawapan oleh pengguna.
  • Padamkan soalan.

Pertama, kami mencipta direktori projek dan struktur kami.

Dalam direktori utama projek, kami akan membuat folder app, dan kemudian dalam folder aplikasi ini, kami akan membuat dua folder: model dan pengawal. Dalam gambar ini, folder projek utama kami dinamakan fasih. Anda perlu menggantikannya dengan apa sahaja nama yang anda suka.

Our project organization

Seterusnya, kami membuat fail index.php dalam folder projek utama, pada tahap yang sama dengan folder app.

Kami akan menggunakan git, jadi kami buat fail .gitignore. Ambil perhatian bahawa langkah ini adalah pilihan.

Seterusnya, kami memasang kebergantungan yang diperlukan bagi projek ini untuk bekerja. Dalam folder projek utama, kami akan mencipta fail composer.json. Kemudian tampal ini dalam fail composer.json kami.

Untuk memasang pangkalan data menerangi, kami menambah ini ke composer.json kami:
"Menerangi/pangkalan data": "5.1.8",.

Seterusnya, kita Tambah psr-4 pengisi bagi model dan pengawal kami:

Kini, gambar composer.json kami sepatutnya kelihatan seperti ini:

Kami kini akan menjalankan arahan dua komposer ini di lokasi yang sama seperti fail composer.json kami:

Ini akan menghasilkan satu folder penjual yang kita boleh menambah ke gitignore (ini adalah juga satu langkah pilihan).

Mari tambahkan fail konfigurasi untuk kelayakan pangkalan data kami.

Dalam direktori projek utama, kita mencipta fail bernama config.php dan tentukan butiran DB dalam fail Config.php. Ambil perhatian bahawa nilai harus diganti dengan butiran sambungan anda sendiri.

Seterusnya, kami buat skema untuk aplikasi kami.

Satu perkara yang harus diperhatikan sebelum kita membuat skema untuk jadual dalam pangkalan data kami ialah kita boleh menambah cap waktu untuk skema kami.

ORM fasih dalam menjangkakan kedua-dua Cap masa ruang jika kita mahu mengaktifkan Cap masa operasi Jadual/model tertentu. Mereka adalah lajur yang created_at dan updated_at. Jika kita mendayakan cap waktu untuk model, Eloquent secara automatik mengemas kini medan ini dengan masa yang kita buat atau mengemas kini rekod.

Terdapat lajur ketiga dipanggil deleted_at. The timestamp dihapus_at berfungsi dengan berbeza, walaupun. Eloquent mempunyai keupayaan memadamkan lembut yang menggunakan lajur deleted_at untuk menentukan sama ada rekod telah dipadamkan. Jika anda memadamkan rekod dengan fungsi "padam" yang fasih dan anda membolehkan Padam Lembut, lajur dikemas kini dengan masa penghapusan. Barang-barang yang dihapuskan ini kemudian boleh diambil pada bila-bila masa.

Dalam aplikasi ini, kami akan mengambil kesempatan daripada cap waktu, jadi kami akan menggunakan ketiga-tiga dalam penciptaan Skema kami.

Buat jadual dengan arahan berikut dalam MySQL:

Soalan

Jawapan

Upvotes

Pengguna

Kami akan meneruskan dengan membuat fail untuk model dan pengawal untuk jadual kami 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 model/database.php dengan editor.

Pertama kita buat Kapsul:

Dalam fail di atas, kita mulakan dan tetapkan kapsul dengan pemalar yang ditakrifkan dalam config.php, dan kemudian kita boot yang fasih.

Langkah seterusnya ialah membuat skrip mula. Ini akan menjadi fail di mana semua yang perlu dijalankan sebelum aplikasi kami berfungsi.

Kami mencipta fail permulaan di lokasi project_folder/start.php, dan kemudian dalam fail, memerlukan fail autoload Composer:

memerlukan 'vendor/autoload.php';

Selepas itu, kami memerlukan config.php untuk mendapatkan kelayakan yang ditakrifkan: memerlukan 'config.php';

Kemudian kami memulakan kelas pangkalan data.

Start.php anda sepatutnya kelihatan seperti ini:

Sertakan start.php di index.php anda kerana ini akan menjadi fail utama kami.

Fail index.php kami kelihatan seperti ini:

Seterusnya, kami boleh mula mengendalikan pengendali dan model kami. Dalam project_folder/app/models/question.php, kita menambah ini:

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

Di project_folder/app/controllers/answers.php, kami melakukan perkara yang sama:

Petugas 1: Tambah Pengguna

Dalam model pengguna (project_folder/app/models/user.php), kami menambah kod berikut untuk menentukan ruang nama kami, meluaskan Model Eloquent, dan menentukan nama jadual (dilindungi $table) dan apa bidang dalam jadual yang boleh diisi oleh penciptaan massa (terlindung $fillable).

Dalam kawalan pengguna (project_folder/app/controllers/user.php), kita mendefinisikan ruang nama dan kelas kami seperti biasa:

Kemudian untuk mencipta pengguna, dalam pengawal pengguna, kami mengimport ruang nama Model pengguna, gunakan Model\Pengguna;, dan kemudian tambah fungsi untuk membuat pengguna.

Pengawal pengguna kami kini kelihatan seperti ini.

Kemudian di index.php kita menambah baris ini dan menjalankan aplikasinya untuk mencipta pengguna baru.

Petugas 2: Tambah Soalan

Untuk menambah soalan yang kita import namespace model soalan dalam pengawal soalan dan fungsi create_question menulis:

menggunakan ModelsQuestion;

Kemudian:

Kami telah menggunakan model penciptaan jisim Eloquent untuk memasukkan rekod ini, tetapi sebelum ia berfungsi, kita perlu membenarkan bidang tersebut dimasuki, kerana model Eloquent mengawal penciptaan massa secara lalai.

Oleh itu, kami pergi ke model soalan dan tambahkan harta yang dilindungi $terkawal ke kelas.

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

Untuk menjalankan ini, import pengawal pertanyaan di index.php dan panggil fungsi create_question secara statik:

gunakan Pengawal\Soalan;

Kemudian mencipta satu soalan dengan soalan dan Id pengguna sebagai parameter:

$question = Questions::create_question ("Pernahkah anda bertemu doppelganger anda?",1);

Ini mengembalikan objek model jika berjaya.

Kami kini akan menjalankan skrip index.php dengan penyertaan yang berbeza untuk menambah soalan ke dalam pangkalan data.

Tugas 3: Tambah Jawapan kepada Soalan

Dalam model jawapan, kami ulangi langkah-langkah yang diambil untuk model soalan dan pengguna dengan menambah kod di bawah:

Kemudian dalam pengawal jawapan, kami menuliskan baris ini:

Kemudian di index.php, kita boleh mencipta jawapan untuk soalan dengan id 1 kami menambah lebih awal, dengan id pengguna 2. Jangan lupa untuk mengimport pengawal jawapan index.php terlebih dahulu.

Untuk mengelakkan beberapa entri, komen semua panggilan lain index.php sebelum menjalankan yang baru.

Petugas 4: Menaikkan Jawapan

Ini adalah langkah yang sama seperti yang kita gunakan.

Jadi kita akan menyalin ini ke dalam model Upvote pada project_folder/app/models/upvote.php.

Kemudian dalam pengawal jawapan, kami mengimport ruang nama Model Upvote.

gunakan Model\Upvote;

Kemudian kita buat fungsi upvote_answer.

Dalam index.php, kita boleh panggil fungsi dengan satu ID pengguna yang bodoh untuk upvote jawapan dengan id 1.

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

Petugas 5: Dapatkan Soalan Dengan Jawapan

Untuk tugas seperti ini, kita boleh menggunakan hubungan Eloquent.

Jenis hubungan termasuk satu hingga satu, satu kepada banyak, banyak kepada banyak, dan lain-lain.

Apabila menggunakan hubungan ini, Eloquent menganggap kunci asing dalam bentuk modelname_id wujud pada model. Untuk tugas ini, hubungan itu adalah hubungan satu sama banyak kerana satu soalan boleh memiliki sejumlah jawapan.

Mula-mula kita mentakrifkan hubungan ini dengan menambahkan fungsi ini kepada model soalan kami.

Kemudian dalam pengawal soalan, kami menulis fungsi untuk mendapatkan soalan dengan jawapan.

Ini mengambil soalan dengan jawapan yang sama.

Dalam index.php, kami mengulas semua panggilan lain dan jalankan:

$all = Questions::get_questions_with_answers();

Kita boleh var_dump atau print_r pembolehubah $all untuk melihat hasilnya.

Tugasan 6: Dapatkan Semua Soalan dan Pengguna yang Meminta Mereka

Ini adalah untuk satu hubungan kerana satu soalan mempunyai satu pengguna, jadi kami Tambah ini kepada model soalan.

Kemudian kami mencipta fungsi dalam pengawal soalan dan menggunakannya with fungsi pada model soalan.

Dalam index.php, komen semua yang lain dan jalankan ini:

$all_with_users = Questions::get_questions_with_users();

Tugas 7: Dapatkan Satu Soalan Dengan Jawapan dan Upvotes

Pertama, kita menentukan hubungan antara jawapan dan upvote. Jawapannya mempunyai banyak upvote, jadi hubungannya adalah satu kepada banyak orang.

Oleh itu kami menambah fungsi berikut kepada model jawapan kami:

Kemudian dalam pengawal soalan, kita buat fungsi untuk mendapatkan ini:

Seperti dalam langkah-langkah sebelumnya, kami mengulas semua panggilan lain ke index.php dan jalankan ini:

$one_question = Soalan::get_question_answers_upvotes(1);

Kami mencetak pembolehubah $one_question untuk melihat hasilnya.

Tugas 8: Kenali Semua Soalan oleh Pengguna Khusus

Mula-mula kita mengimport model soalan dalam pengawal pengguna:

menggunakan Models\Question;

Kemudian kita menulis fungsi ini:

Dalam index.php, kami mengulas panggilan lain dan menambah baris ini:

$user_question_count = Users::question_count(1);

Ini mengembalikan integer yang merupakan bilangan soalan yang telah ditambahkan oleh pengguna dengan id 1.

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

Petugas 9: Kemas kini Jawapan oleh Pengguna

Konsep mengemaskini dengan ORM Eloquent agak mudah. Mula-mula kita dapati rekod, dan kemudian kita bermutasi dan menyelamatkan.

Kini, dalam pengawal jawapan, kami menambah fungsi ini:

Dalam index.php, kami boleh mengulas semua panggilan lain, dan mengemas kini jawapan dengan id 1 seperti ini:

$update_answer = Jawapan::update_answer (1, "Ini adalah jawapan yang dikemas kini");

Ini mengembalikan nilai-benar-jika pembaruan berjaya.

Tugas 10: Padam Soalan (Padam Lembut)

Dalam tugas akhir ini, kami akan melaksanakan Eloquent SoftDelete.

Mula-mula kita memberitahu model pertanyaan untuk menggunakan SoftDeletes dengan mengimport ruang nama SoftDeletes, dan kemudian menggunakan sifat SoftDeletes di kelas kami.

gunakan Illuminate\Database\Eloquent\SoftDeletes;

Kemudian selepas baris perisytiharan kelas, kami menambah baris ini:

gunakan SoftDeletes;

Kemudian kami menambah deleted_at ke $tarikh dilindungi yang dilindungi untuk model itu. Ini adalah langkah yang diperlukan.

$tarikh dilindungi = ['deleted_at'];

Model soalan kami kini kelihatan seperti ini:

Kemudian kami buat fungsi delete_question dalam pengawal pertanyaan.

Jalankan di index.php:

$delete = Questions::delete_question(1);

Tahniah! Anda hanya membina belakang sepenuhnya berfungsi dengan Illuminate dan Eloquent. Dan kita tidak perlu menulis banyak kod untuk mencapai semua ini.

Kod untuk tutorial ini boleh didapati di GitHub.

Kesimpulan 

Bercahaya juga dilengkapi dengan Query Builder yang boleh anda gunakan untuk pertanyaan pangkalan data yang lebih kompleks dan pastinya sesuatu yang anda ingin bereksperimen dengan dan gunakan di aplikasi anda.

Satu-satunya perkara yang hilang dalam Pangkalan Data Illuminate yang tersendiri adalah migrasi pangkalan data, yang merupakan ciri indah Laravel, dan Lumen, rangka kerja mikro oleh Laravel. Anda harus mempertimbangkan untuk menggunakan kedua-dua aplikasi anda untuk mendapatkan kelebihan ciri berguna yang mereka hadapi.

Anda boleh mengetahui lebih lanjut mengenai Eloquent di Laman Dokumentasi Eloquent Rasmi.

Rujukan

Advertisement
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.