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

Membangun aplikasi Web dari awal dengan Laravel - Eloquent ORM

by
Read Time:18 minsLanguages:

Indonesian (Bahasa Indonesia) translation by Dika Budiaji (you can also view the original English article)

Dalam Nettuts + Mini Seri ini, kita akan membangun aplikasi web dari awal, sambil menyelam ke PHP framework baru yang keren, disebut Laravel.

Pada pelajaran ini kita akan bekerja pada bagian integral dari aplikasi web: Model. Sepanjang jalan, kita akan mempelajari tentang Laravel's menakjubkan ORM implementasi: Eloquent.


Tinjauan

Selamat datang kembali ke aplikasi Web kami dari awal dengan seri Laravel! Dalam tutorial pertama dari seri, kami belajar banyak tentang Laravel dan filosofi:

  • Apakah itu Laravel
  • Apa yang membuat Laravel berbeda dari Framework PHP lain
  • Dimana untuk mendownload Laravel
  • Cara men-setup Laravel
  • Bagaimana Laravel's Routing sistem bekerja
  • Sistem penjaluran beberapa fitur lainnya di Laravel
  • Cara membuat Laravel Controller pertama
  • Beberapa fitur tambahan dengan Laravel's controller
  • Cara membuat tampilan Laravel pertama
  • Bagaimana menggunakan Laravel's Blade Template Engine

Jika Anda belum membacanya Namun, Anda harus mengambil melihat tutorial sebelumnya dan memberikannya membaca - ini akan membuatnya lebih mudah untuk memahami filosofi di balik Laravel dan sebagian besar dari apa yang kita membahas dalam tutorial ini.

Dalam bagian kedua ini  dari seri Laravel, kami akan membangun bagian penting dari aplikasi tes web kami, Instapics, yang merupakan Model implementasi. Tanpa basa basi  lagi, mari kita mulai!


Apa itu "Model"?

Aku sudah bicara sedikit tentang apa Model itu di salah satu artikel saya sebelumnya, Zend Framework dari awal - model dan mengintegrasikan Doctrine ORM, jadi untuk menghindari mengulang sendiri, saya akan menulis inti dari apa yang saya tulis sebelumnya di sini. Jangan ragu untuk merujuk kepada tutorial lain dan membaca lebih lanjut tentang apa model yang ada.

Ringkasan:

  • Model perwakilan dari Database, dan harus mana semua logika bisnis aplikasi berada
  • Controller berkomunikasi dengan model dan meminta mereka untuk mengambil informasi yang mereka butuhkan
  • Informasi ini kemudian melewati Controller ke tampilan dan dituliskan
  • Sangat jarang bahwa Model langsung berinteraksi dengan View, tapi kadang-kadang mungkin terjadi bila diperlukan
  • Model dapat berbicara dengan model-model lain dan tidak mandiri. Mereka memiliki hubungan yang terjalin dengan satu sama lain
  • Hubungan ini membuatnya lebih mudah dan cepat untuk Controller untuk mendapatkan informasi, karena itu tidak berinteraksi dengan model - model yang dapat melakukan itu sendiri

Model Laravel, atau dalam kebanyakan framework, dikembangkan dengan cara yang sama. Perbedaannya adalah bahwa Laravel memberikan cara mudah untuk membangun model ini, dengan menyediakan kita dengan metode umum yang kebanyakan model akan perlu - Eloquent ORM.


Elqouent ORM

ORM adalah object-relational mapper, dan Laravel memiliki salah satu yang Anda absolutely will love! Dinamai "Eloquent," karena hal itu memungkinkan Anda untuk bekerja dengan objek database Anda dan hubungan menggunakan sintaks yang fasih dan ekspresif.

Eloquent ORM adalah Laravel's built-in ORM implementasi. Menurut pendapat saya, ini adalah salah satu implementasi ORM terbaik yang saya telah lihat sejauh ini - menyaingi bahkan Doctrine ORM. Itu sangat elegan, membuat penggunaan standar industri Konvensi untuk mengurangi konfigurasi.

Konvensi

Misalnya, menggunakan model Eloquent mengasumsikan bahwa memiliki tabel model yang mewakili field id. Id adalah kunci utama untuk redord, dan digunakan oleh sebagian besar metode Eloquent.

Hal lain juga Eloquent dengan benar mengasumsikan adalah bahwa nama tabel bentuk jamak model Anda. Sebagai contoh, model User Anda akan referensi tabel users. Seperti ini mungkin tidak selalu menjadi standar untuk beberapa, Laravel menyediakan cara untuk menimpa informasi ini: hanya menggunakan flag $table:

Ini akan menginstruksikan Laravel untuk tidak menggunakan Konvensi dan sebaliknya menggunakan tabel tertentu.

Akhirnya, Laravel juga dapat mengotomatisasi penciptaan dan memperbarui timestamp waktu bagi kita. Untuk melakukannya, tambahkan created_at dan/atau updated_at kolom dalam tabel, dan set $timestamp flag dalam model:

Eloquent akan melihat flag, dan secara otomatis mengatur bidang created_at pada penciptaan, dan memperbarui field updated_at setiap kali record diupdate. Cukup keren, ya?

Pencarian cepat

Mengambil catatan adalah snap dengan Eloquent 's pengambilan metode. Misalnya, Anda perlu menemukan record pengguna tertentu? Hanya melakukan:

Ini akan mengembalikan model User yang dapat Anda lakukan operasi pada! Perlu menggunakan conditional? Mari kita bayangkan bahwa Anda ingin mengambil user dengan alamat email. Untuk menyelesaikan tugas ini, Anda mungkin melakukan sesuatu seperti:

Atau, Anda dapat menggunakan Laravel's dinamis metode:

Mudah menyisipkan & update

Memasukkan dan memperbarui model-model yang menggunakan Eloquent dapat dicapai dalam tiga langkah.

  • Langkah 1 - Get/Create model.

  • Langkah 2 - Set data

  • Langkah 3 - Simpan

  • Selesai!

Dan akhirnya, mendefinisikan Relationship.

Eloquent membuat proses mendefinisikan relationship dan mengambil model bersangkutan sederhana dan intuitif.

Benarkan! Eloquent mendukung tiga jenis hubungan:

  1. One-to-One
  2. One-to-Many
  3. Many-to-Many

Untuk menentukan relationshop antara model-model, Anda akan perlu untuk menciptakan metode dalam kedua model yang "menggambarkan" hubungan mereka. Sebagai contoh, katakanlah User has_one User_Profile. Anda dapat melakukannya dengan mendefinisikan sebuah metode user_profile di User model:

Karena User adalah model "dominan" kami di sini (yaitu pengguna memiliki profil, dan memiliki tidak profil pengguna), kita mendefinisikan User_Profile belongs_to ke User:

Setelah kita sudah didefinisikan relationship ini, kita kemudian dapat kita lakukan:

Satu hal yang perlu diperhatikan di sini adalah konvensi lainnya: Eloquent mengasumsikan bahwa foreign key yang digunakan dalam User_Profile adalah nama tabel direferensikan + _id. Sekali lagi, jika Anda ingin mengubah perilaku ini, Anda dapat mengganti itu:

Mari kita mengatakan bahwa kita ingin menentukan relationship antara User dan Photo upload. Ini adalah Onte-to-Many relationship, tidak seperti User-to-User Profil  relationship dimana itu One-to-One Kita tahu bahwa salah satu User has_many Photo upload, jadi:

Perbedaan utama dengan has_one adalah bahwa fungsi kita akan menggunakan untuk mengambil User foto sekarang akan mengembalikan sebuah array obyek Photo. Jadi, jika kita ingin mengambil semua User foto, kita bisa melakukan:

Nope, mengacu pada photos sebagai properti tidak salah ketik. Laravel memberi kita sedikit kemudahan. Kita juga bisa melakukan:

Many-to-Many Relationship

Satu ini agak sedikit rumit, tapi setelah diimplementasikan, membuatnya mudah untuk menangani Many-to-Many hubungan antara model-model. Mari kita bayangkan, misalnya, bahwa Anda, sekali lagi, memiliki User model, dan masing-masing pengguna dapat memiliki beberapa Groups. Group juga dapat memiliki beberapa user. Kami akan menggunakan tiga tabel untuk mewakili hubungan tertentu ini:

  • Users - tabel dimana menyimpan user
  • Groups - table yang mana semua grup disimpan
  • Group User - tabel dimana menyimpan user di grup

Konvensi struktur tabel yang Eqloeunt akan mencari akan menjadi sesuatu seperti ini:

  • users
    • id
    • .. .kolom lainnya
  • groups
    • id
    • .. .kolom lainnya
  • group_user
    • id
    • user_id
    • group_id
    • .. .kolom lainnya

Satu konvensi lainnya untuk dicatat di sini adalah bahwa tabel menengah, group_user, nama-nama singular dua tabel yang menghubungkan, disusun secara alfabetis dengan tanda garis bawah. Seperti biasa, kami akan bebas untuk menimpa informasi ini.

Berikut adalah bagaimana kode akan terlihat di dalam setiap model untuk tabel ini tiga:

Dengan ini di tempat, kita kemudian dapat mengambil keuntungan dari Eloquent 's relationship fungsi:


Langkah 1 - menciptakan Instapics Database

Instapics

Melanjutkan dengan aplikasi web kami, Instapics, mari kita mulai dengan menciptakan database aplikasi kita. Untuk melakukannya, mari kita tuliskan fungsionalitas yang diinginkan dari aplikasi:

  • Pengguna dapat login dan mendaftar untuk sebuah account
  • Pengguna dapat mengikuti pengguna lain untuk melihat foto-foto yang mereka upload
  • Pengguna dapat meng-upload foto mereka sendiri dan menerapkan penyaring untuk itu
  • Pengguna dapat komentar dan like foto

Dari ini, kita dapat simpulkan tabel database yang kita perlukan:

  • users

    • id (One-to-One dengan user_profiles.user_id, Many-to-Many dengan menggunakan diri intermediate tabel relationships.follower_id dan followed_id, One-to-Many dengan photos.user_id dan photo_comments.user_id)
    • email
    • sandi
    • created_at
    • updated_at
  • user_profiles

    • id
    • user_id (One-to-One dengan users.id)
    • name
    • profile_photo
  • relationship

    • id
    • follower_id(One-to-One dengan users.id)
    • followed_id (One-to-One dengan users.id)
    • created_at
    • updated_at
  • photos

    • id (One-to-Many dengan photo_comments.user_id)
    • user_id (One-to-One dengan users.id)
    • location
    • description
    • created_at
    • updated_at
  • photo_comments

    • id
    • user_id(One-to-One dengan users.id)
    • photo_id (One-to-One dengan photos.id)
    • message
    • created_at
    • updated_at

Mari kita pergi ke depan dan membuat tabel ini. Untuk proyek ini, aku akan menggunakan MySQL; merasa bebas untuk menyalin dan menyisipkan perintah ini.

Atau, Anda dapat menggunakan migration, tapi kami akan meninjau mereka dalam pelajaran nanti.


Langkah 2 - Setup Konfigurasi Database Laravel's

Sebelum melakukan apa-apa dengan model Laravel, kita perlu men-setup konfigurasi database kami instalasi Laravel. Buka application/config/database.php, untuk menemukan beberapa pengaturan ini:

  • profile - pengaturan ini ke true akan log semua SQL querie kali ke log Laravel. Meninggalkan ini sebagai true untuk sekarang.
  • fetch - jenis data yang dikembalikan dari PDO. Nilai default adalah PDO::FETCH_CLASS dan harus dibiarkan seperti.
  • default - ini adalah nama pengaturan sambungan yang digunakan oleh aplikasi. Nama mengacu pada indeks dalam $connections array tepat di bawah
  • connections - array asosiatif mungkin koneksi untuk aplikasi Anda.

    • driver - jenis server database. Ini bisa menjadi pgsql, sqlite, mysql atau sqlsrv
    • host - nama host dari server database Anda
    • database - nama database
    • username - username untuk menggunakan database server
    • password - password untuk digunakan pada database server
    • charset - charset untuk digunakan pada database server
    • prefiks - prefiks tabel di database, jika ada
  • Redis - jika Anda berencana untuk menggunakan Laravel's Redis Perpustakaan, Anda dapat mengatur agar informasi server di sini.

Untuk tujuan dari tutorial ini, kita akan menggunakan MySQL. database.php file seharusnya terlihat seperti ini (saya dihapus komentar, tetapi mereka harus baik-baik saja untuk menjaga):


Langkah 3 - membuat Model Laravel yang pertama Anda

Mulailah dengan membuat model Laravel di dalam folder application/modelsl. Membuat user.php di dalam, dan tambahkan kode berikut:

Sekarang, berdasarkan review kami dari apa yang User relationshup, kita perlu kode metode relationship untuk mereka semua:

Jelas, kita membuat penggunaan beberapa advanced many-tomany fungsi di sini, karena struktur tabel model pengikut kami (yaitu users Tabel referensi tabel relationship yang referensi users table lagi). Fungsi has_many_and_belongs_to memiliki tangan metode berikut:

Ini benar-benar Mari kita membuat model yang memiliki Many-to-Many relationship dengan dirinya sendiri (yaitu User mengikuti User lain). Kami menggunakan followers dan following metode berikut pada User model untuk memungkinkan kita untuk mendapatkan pengikut pengguna atau mendapatkan semua pengguna yang satu pengguna mengikuti, masing-masing.

Following User model, menciptakan model-model lain. Setelah Anda selesai, Anda harus:

  • application/models/photo.php
  • application/models/photo_comment.php
  • application/models/relationship.php
  • application/models/user.php
  • application/models/user_profile.php

File-file ini akan dalam repositori Git tutorial, jadi jika Anda memilih untuk men-download mereka, Anda dapat menemukannya di sini: https://github.com/nikkobautista/laravel-tutorial


Langkah 4 - membuat fungsi pengguna untuk Instapics

Mari kita mulai menggunakan model kami dengan menciptakan beberapa fungsi pengguna kami akan memerlukan aplikasi. Pertama: pendaftaran pengguna. Dari tutorial sebelumnya, kami telah membuat formulir Registration/Login Form pada home page. Untuk sekarang, itu tidak melakukan apa-apa, tapi mari kita hook ke User controller, authenticate aksi. Membuat application/controllers/user.php dengan kode berikut:

Buka application/views/home/index.blade.php dan mencari login form. Memperbarui formulir di baris 18 untuk kirim ke action_authenticate() metode:

Kembali ke User_Controller, mari kita menempatkan beberapa kode dalam action_authenticate():

Mari kita break-down yang telah kami lakukan di sini sejauh ini:

  • Kami menggunakan perpustakaan Input untuk mendapatkan masukan dari form yang disubmit
  • Jika $new_user flag diperiksa, kami membuat User baru, menggunakan perpustakaan Hash untuk menghasilkan sandi yang dienkripsi.
  • Login User baru dengan perpustakaan Auth
  • Jika flag $new_user dicentang, kami menciptakan sebuah array $credentials, dan menggunakannya dengan perpustakaan Auth.
  • Jika Auth::attempt benar, itu berarti kredensial yang benar dan kami masuk
  • Lain, itu berarti kredensial yang salah.
  • Dalam skenario kedua, mengarahkan ke Dashboard controller, index tindakan bila berhasil, dan echo pesan kegagalan jika tidak.

Perpustakaan Input

Fungsi dasar perpustakaan Input adalah untuk memungkinkan pengambilan data formulir. Sebagai contoh, di controller User, kami digunakan Input::get('email'); untuk mendapatkan nilai email dari bentuk. Hal ini penting untuk dicatat bahwa metode get digunakan untuk semua jenis permintaan dan bukan hanya $_GET array.

Anda dapat membaca lebih lanjut tentang Perpustakaan masukan di sini: http://laravel.com/docs/input#input

Auth Perpustakaan

Laravel dilengkapi dengan mekanisme otentikasi sendiri, Perpustakaan Auth. Dapat melakukan fitur berikut berkaitan dengan otentikasi pengguna.

Membuat hashed password

Kita dapat membuat penggunaan Perpustakaan Hash seperti:

Metode ini menciptakan salted dan hashed sandi untuk user, menggunakan kunci enkripsi yang kita tetapkan di file konfigurasi. Untuk memeriksa jika hash benar, Anda dapat menggunakan:

Logging user

Untuk ini, kita menggunakan metode attempt Auth Perpustakaan. Sebelum itu, meskipun, kami membangun sebuah array $credentials, yang merupakan array asosiatif dengan username dan password indeks:

Hal ini penting untuk menjaga dalam pikiran bahwa setelah upaya "sukses", pengguna secara otomatis masuk.

Loggin user in/out 

Kadang-kadang, kita akan perlu untuk login pengguna tanpa menggunakan metode attempt (seperti ketika log in pengguna dari link dalam email, atau pasca pendaftaran). Kita bisa melakukannya dengan metode Auth::login:

Di sisi lain, kami juga memiliki Auth::logout metode untuk log user keluar:

Ini akan mengakhiri sesi pengguna.

Mengambil data pengguna login

Metode Auth::user yang memungkinkan kita untuk mengambil login di objek pengguna, serta informasi yang melekat padanya:

Mengkonfigurasi Auth Perpustakaan

Auth Perpustakaan harus dikonfigurasi sebelum menggunakannya (meskipun default akan bekerja dengan sebagian besar proyek, seperti yang satu ini). Variabel konfigurasi adalah:

  • driver - ini bisa menjadi eloquent atau fluent. Pengembang dapat menulis driver sendiri dengan extend kelas Drive  di laravel/auth/driver.
  • username - ini adalah nama kolom apa pun mewakili pengguna "username" dalam tabel database.
  • model - ketika menggunakan Eloquent, ini adalah kelas model yang menggunakan perpustakaan Auth
  • tabel - dengan menggunakan Fluent authentikasi driver, ini menentukan tabel database untuk pengguna dalam aplikasi

Proyek kami, Instapics, menggunakan nilai default di file konfigurasi auth.php, jadi kita tidak perlu untuk mengubah apa-apa di dalamnya.

Kembali ke proyek, mencoba menguji fitur login/registrasi Instapics! Cukup bagus, ya? Anda akan melihat meskipun bahwa kita tidak memiliki apa-apa di Dashboard controller belum, jadi mari kita bekerja pada berikutnya.


Langkah 5 - membuat Instapics Dashboard

Hal pertama yang perlu kita lakukan adalah membuat Dashboard controller, dengan index tindakan. Membuat file application/controllers/dashboard.php dan dimasukkan ke dalam kode berikut:

Sekarang kita perlu menciptakan halaman indeks Dashboard. Membuat application/views/dashboard/index.blade.php dan menambahkan berikut:

Refresh halaman dashboard, Anda harus melihat ini:

Instapics DashboardInstapics DashboardInstapics Dashboard

Terlihat sedikit kosong?. Menambahkan ini ke Dashboard controller, dan menjalankannya dengan mengakses dashboard/insert_test_data pada browser Anda:

Ketika Anda memperbarui halaman, Anda akan melihat apa yang tampak seperti dengan data sampel dimasukkan:

Instapics Dashboard w Sample DataInstapics Dashboard w Sample DataInstapics Dashboard w Sample Data

Kesimpulan

Dalam bagian kedua dari seri Laravel kami, kita belajar:

  • Beberapa latar belakang pada apa yang "Model"
  • Apakah itu Eloquent ORM
  • Cara mengatur konfigurasi database Laravel's
  • Cara membuat Laravel Model yang pertama Anda
  • Fungsi dasar dari perpustakaan Auth dan Input
  • Membuat penggunaan ORM Eloquent dalam view

Eloquent benar-benar adalah sebuah implementasi ORM yang mengagumkan - cepat dan memiliki banyak fitur yang membuat interaksi database dalam aplikasi sesederhana mungkin.

Berikutnya di aplikasi Web kami dari awal dengan Laravel seri, kita akan mempelajari lebih lanjut tentang menggunakan Laravel's filter, Laravel's validasi library, dan bagaimana untuk bekerja dengan file dalam Laravel!

Apa pendapat Anda tentang Laravel's Eloquent ORM? Apakah itu sesuatu yang Anda anggap berguna? Beritahu saya di komentar! Dan, jika Anda anggota Tuts + Premium, menantikan untuk kursus Laravel Essentials yang akan datang dari kami!

Advertisement
Did you find this post useful?
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.