Ads 970x90

List Labels

iklan banner

Newsletter

Menggunakan Database Illuminate Dengan Eloquent Di Aplikasi PHP Anda Tanpa Laravel Mysql Laravel Join

Post a Comment

Menggunakan Database Illuminate dengan Eloquent di Aplikasi PHP Anda Tanpa Laravel

Hallo, selamat sore, sesi kali ini akan dibahas mengenai mysql laravel join Menggunakan Database Illuminate dengan Eloquent di Aplikasi PHP Anda Tanpa Laravel simak selengkapnya 

Illuminate adalah mesin database Laravel, minus Laravel. Ini dilengkapi dengan ORM Eloquent di Laravel. Jika Anda ingin melahirkan aplikasi PHP Anda dengan ORM dan memilih untuk tidak memakai 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 sebentuk pertanyaan.
  • Menambahkan balasan untuk sebentuk pertanyaan.
  • Upvote sebentuk jawaban.
  • Mendapatkan sebentuk pertanyaan dengan jawaban.
  • Mendapatkan sarwa pertanyaan dan pemakai yang menanyakannya.
  • Mendapatkan pertanyaan, jawaban, dan upvote tertentu.
  • Menghitung pertanyaan oleh pemakai tertentu.
  • Memperbarui balasan oleh pengguna.
  • Menghapus sebentuk pertanyaan.

Pertama, kita melahirkan direktori dan struktur proyek kita.

Dalam direktori proyek utama, kita akan melahirkan sebentuk berkas aplikasi, dan akan datang di berkas aplikasi ini, kita akan melahirkan dobel folder: model dan controller. Dalam coretan ini, berkas proyek baku kita diberi nama eloquent. Anda bisa menggantinya dengan nama apapun yang Anda inginkan.

Our project organization

Selanjutnya, kita melahirkan file index.php di berkas proyek utama, pada tingkat yang sama bagai berkas aplikasi.

Kita akan memakai git, jadi kita melahirkan file .gitignore. Perhatikan bahwa langkah ini bersifat opsional.

Selanjutnya, kita memasang dependensi yang dibutuhkan biar proyek ini bisa berjalan. Di berkas proyek utama, kita akan melahirkan file composer.json.


 “name”: “illuminate-example/eloquent”,
 “description”: “Implementation of Database Queries with illuminate and Eloquent”,
 “type”: “project”,
 “require”: 

Untuk menginstal database Illuminate, kita me-lanjutkan ini ke composer.json kita:

“illuminate/database”: “5.1.8”,.

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

“autoload”: 
 “psr-4”: 
 “Controllers\\”: “app/controllers/”,
 “Models\\”: “app/models/” 
 

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


 “name”: “illuminate-example/eloquent”,
 “description”: “Implementation of Database Queries with illuminate and Eloquent”,
 “type”: “project”,
 “require”: 
 “illuminate/database”: “5.1.8”,
 “autoload”: 
    “psr-4”: 
         “Controllers\\”: “app/controllers/”,
            “Models\\”: “app/models/"
            
                 
    


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

composer install
composer dump-autoload -o

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

Mari me-lanjutkan file konfigurasi untuk kredensial database kita.

Dalam direktori proyek utama, kita melahirkan sebentuk file bernama config.php dan membatasi rincian DB pada file Config.php. Perhatikan bahwa nilainya kudu diganti dengan rincian afiliasi Anda sendiri.

<?php

defined(“DBDRIVER”)or define(‘DBDRIVER’,’mysql’);
defined(“DBHOST”)or define(‘DBHOST’,’localhost’);
defined(“DBNAME”)or define(‘DBNAME’,’eloquent-app’);
defined(“DBUSER”)or define(‘DBUSER’,’root’);
defined(“DBPASS”)or define(‘DBPASS’,’pass’);

Selanjutnya, kita melahirkan skema untuk aplikasi kita.

Satu hal yang harus diperhatikan sebelum kita melahirkan skema untuk tabel pada database kita adalah kita bisa me-lanjutkan timestamp ke pada skema kita.

ORM Eloquent mengharapkan dobel 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 sebentuk model, Eloquent ala impulsif memperbarui field ini dengan waktu saat kita melahirkan atau memperbarui sebentuk record.

Ada kolom ketiga yang disebut deleted_at. Timestamp deleted_at beraksi ala berbeda, sungguh. Eloquent ada kemampuan penghapusan lemas yang memakai kolom deleted_at untuk menentukan apakah sebentuk record telah dihapus. Jika Anda basmi sebentuk record dengan guna 'delete' dari eloquent dan Anda mengaktifkan Soft Delete, kolom akan diperbarui dengan waktu penghapusan. Item yang dihapus ini akan datang dapat diambil kapan saja.

Di aplikasi ini, kita akan memanfaatkan timestamp, jadi kita akan memakai ketiganya pada pembuatan Skema kita.

Membuat tabel dengan perintah bersama-sama di MySQL:

Pertanyaan

CREATE TABLE `questions` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `question` tinytext,
 `user_id` int(11) DEFAULT NULL,
 `created_at` timestamp NULL DEFAULT NULL,
 `updated_at` timestamp NULL DEFAULT NULL,
 `deleted_at` timestamp NULL DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Jawaban

CREATE TABLE `answers` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `answer` tinytext,
 `user_id` int(11) DEFAULT NULL,
 `question_id` int(11) DEFAULT NULL,
 `created_at` timestamp NULL DEFAULT NULL,
 `updated_at` timestamp NULL DEFAULT NULL,
 `deleted_at` timestamp NULL DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Upvote

CREATE TABLE `upvotes` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `answer_id` int(11) DEFAULT NULL,
 `user_id` int(11) DEFAULT NULL,
 `created_at` timestamp NULL DEFAULT NULL,
 `updated_at` timestamp NULL DEFAULT NULL,
 `deleted_at` timestamp NULL DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Pengguna

CREATE TABLE `users` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `username` varchar(100) DEFAULT NULL,
 `email` varchar(200) DEFAULT NULL,
 `password` varchar(200) DEFAULT NULL,
 `created_at` timestamp NULL DEFAULT NULL,
 `updated_at` timestamp NULL DEFAULT NULL,
 `deleted_at` timestamp NULL DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Kita akan melanjutkan dengan melahirkan file untuk model dan controller untuk tabel kita di tempat 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 melahirkan Capsule:

<?php

namespace Models; 
use Illuminate\Database\Capsule\Manager as Capsule;

class Database 

    function __construct() 
    $capsule = new Capsule;
    $capsule->addConnection([
     ‘driver’ => DBDRIVER,
     ‘host’ => DBHOST,
     ‘database’ => DBNAME,
     ‘username’ => DBUSER,
     ‘password’ => DBPASS,
     ‘charset’ => ‘utf8’,
     ‘collation’ => ‘utf8_unicode_ci’,
     ‘prefix’ => ‘’,
    ]);
    // Setup the Eloquent ORM… 
    $capsule->bootEloquent();



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

Langkah berikut adalah melahirkan skrip start. Ini akan menjadi file dimana sekalian sesuatu yang kudu dijalankan sebelum aplikasi kita berjalan.

Kita melahirkan file start di tempat project_folder/start.php, dan akan datang di file-nya, require file autoload Composer:

require ‘vendor/autoload.php’;

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

Kemudian kita menginisialisasi aras database.

<?php

use Models\Database;

//Boot Database Connection
new Database();

Start.php Anda akan terlihat bagai ini:

<?php
require ‘config.php’;
require ‘vendor/autoload.php’;
use Models\Database;
//Initialize Illuminate Database Connection
new Database();
?>

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

File index.php kita sekarang terlihat bagai ini:

<?php
require ‘start.php’;
?>

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

<?php

namespace Models;

use \Illuminate\Database\Eloquent\Model;

class Question extends Model 
    
    protected $table = ‘questions’;
    


?>

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

Menggunakan Database Illuminate dengan Eloquent di Aplikasi PHP Anda Tanpa Laravel
<?php
namespace Controllers;

class Questions
    


?>

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

<?php
namespace Controllers;

class Answers
    

?>

Tugas 1: Menambahkan Seorang Pengguna

Dalam model pemakai (project_folder/app/models/user.php), kita me-lanjutkan aba-aba bersama-sama untuk menentukan namespace kita, memperpanjang Model Eloquent, dan menentukan nama tabel (protected $table) dan field barang apa di tabel dapat diisi dengan invensi massal (protected $fillable).

<?php
namespace Models;
use \Illuminate\Database\Eloquent\Model;

class User extends Model 
    protected $table = ‘users’;
    protected $fillable = [‘username’,’email’,’pass’];

?>

Di controller pemakai (project_folder/app/controllers/user.php), kita membatasi namespace dan aras kita bagai biasa:

<?php
namespace Controllers;

class Users
    

?>

Kemudian untuk melahirkan pengguna, di controller pengguna, kita mengimpor namespace Model pengguna, use Models\User;, arkian me-lanjutkan guna untuk melahirkan pengguna.

<?php

    public static function create_user($username, $email, $password)
        $user = User::create(['username'=>$username,'email'=>$email,'password'=>$password]);
        return $user;
    

Controller pemakai kita sekarang terlihat bagai ini.

<?php

namespace Controllers;
use Models\User;

class Users 
    
    public static function create_user($username, $email, $password)
        $user = User::create(['username'=>$username,'email'=>$email,'password'=>$password]);
        return $user;
    

?>

Kemudian di index.php kita me-lanjutkan baris ini dan menjalankan aplikasi untuk melahirkan user baru.

<?php

use Controllers\Users; 

// Import user controller
$user = Users::create_user(“user1”,”user1@example.com”,”user1_pass”);

Tugas 2: Menambahkan sebentuk Pertanyaan

Untuk me-lanjutkan sebentuk pertanyaan, kita mengimpor namespace model Question pada controller pertanyaan, dan memahat guna create_question:

use Models\Question;

Kemudian:

<?php

public static function create_question($question,$user_id)

    $question = Question::create(['question'=>$question,'user_id'=>$user_id]);
    return $question;


Kita telah memakai model invensi massal Eloquent untuk menyisipkan record ini, tapi sebelum itu bekerja, kita harus mengizinkan field tersebut menjadi bisa diisi, karena model Eloquent mengamankan invensi massal ala default.

Jadi, kita angkat kaki ke model question dan me-lanjutkan eigendom protected $fillable ke kelas.

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

Untuk menjalankan ini, impor controller pertanyaan di index.php dan panggil guna create_question ala 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 berlainan untuk me-lanjutkan 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 pemakai dengan me-lanjutkan aba-aba di bawah ini:

<?php
namespace Models;
use \Illuminate\Database\Eloquent\Model;

class Answer extends Model 
    
    protected $table = ‘answers’;
    protected $fillable = [‘answer’,’user_id’,’question_id’];
    

?>

Kemudian di controller jawaban, kita memahat baris ini:

<?php

namespace Controllers;
use Models\Answer;


class Answers 

    public static function add_answer($answer,$question_id,$user_id)
        $answer = Answer::create(['answer'=>$answer,'question_id'=>$question_id,'user_id'=>$user_id]);return $answer;
    


?>

Kemudian di index.php, kita bisa melahirkan balasan untuk pertanyaan dengan id 1 yang kita tambahkan tadi, dengan id user 2. Jangan lupa untuk mengimpor controller balasan ke index.php lebih-lebih dahulu.

<?php

use Controllers\Answers;

    $answers = Answers::add_answer(“This is an answer”,1,2);

Untuk mencegah banyak entri, komentari sarwa ajakan lainnya di index.php sebelum menjalankan yang baru.

Tugas 4: Upvote sebentuk 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.

<?php 
namespace Models;

use \Illuminate\Database\Eloquent\Model;


class Upvote extends Model 

    protected $table = 'upvotes';
    protected $fillable = ['answer_id','user_id'];
     

 ?>

Kemudian pada controller jawaban, kita mengimpor namespace Model Upvote.

use Models\Upvote;

Kemudian kita melahirkan guna upvote_answer.

<?php

    public static function upvote_answer($answer_id,$user_id)
        $upvote = Upvote::create(['answer_id'=>$answer_id,'user_id'=>$user_id]);
        return $upvote;
    

Di index.php, kita bisa mendatangkan guna tersebut dengan ID User dummy untuk upvote balasan dengan id 1.

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

Tugas 5: Mendapatkan sebentuk Pertanyaan dengan Jawaban

Untuk beban bagai ini, kita bisa memakai perhubungan dari Eloquent.

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

Bila memakai perhubungan ini, Eloquent mengasumsikan sebentuk foreign key pada bentuk modelname_id ada pada model. Untuk beban ini, relasinya adalah perhubungan one-to-many karena satu pertanyaan bisa ada sejumlah jawaban.

Pertama, kita membatasi perhubungan ini dengan me-lanjutkan guna ini ke model pertanyaan kita.

<?php

public function answers()

    return $this->hasMany('\Models\Answer');

Kemudian pada controller pertanyaan, kita memahat sebentuk guna untuk membaca pertanyaan dengan jawaban.

<?php

public static function get_questions_with_answers()
 
    $questions = Question::with('answers')->get()->toArray();
    return $questions;

Ini mengambil pertanyaan dengan balasan yang sesuai.

Di index.php, kita menanggapi sarwa ajakan dan menjalankannya:

$all = Questions::get_questions_with_answers();

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

Tugas 6: Mendapatkan Semua Pertanyaan dan Pengguna yang Menanyakannya

Ini adalah perhubungan one to one karena satu pertanyaan ada satu pengguna, jadi kita menambahkannya ke model pertanyaan.

Menggunakan Database Illuminate dengan Eloquent di Aplikasi PHP Anda Tanpa Laravel
<?php

public function user()

    return $this->belongsTo(‘\Models\User’);

Kemudian kita melahirkan guna pada controller pertanyaan dan memakai guna with pada model pertanyaan.

<?php

public static function get_questions_with_users()

    $questions = Question::with('user')->get()->toArray();
    return $questions; 

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

$all_with_users = Questions::get_questions_with_users();

Tugas 7: Mendapatkan sebentuk Pertanyaan dengan Jawaban dan Upvote

Pertama, kita membatasi perhubungan celah balasan dan upvote. Sebuah balasan ada banyak upvote, jadi relasinya one to many.

Jadi, kita me-lanjutkan guna bersama-sama ke model balasan kita:

<?php

public function upvotes()

    return $this->hasMany('\Models\Upvote');

Kemudian pada controller pertanyaan, kita melahirkan guna untuk membaca ini:

<?php

public static function get_question_answers_upvotes($question_id)

    $questions = Question::find($question_id)->answers()->with('upvotes')->get()->toArray();
    return $questions;

Seperti pada langkah sebelumnya, kita menanggapi sarwa ajakan lainnya ke index.php dan menjalankan ini:

$one_question = Questions::get_question_answers_upvotes(1);

Kita bisa membentuk variabel $one_question untuk memandang hasilnya.

Tugas 8: Menghitung Pertanyaan oleh Pengguna Tertentu

Pertama, kita mengimpor model pertanyaan di controller pengguna:

use Models\Question;

Kemudian kita memahat guna ini:

<?php

public static function question_count($user_id)

    $count = Question::where('user_id',$user_id)->count();
    return $count;

Di index.php, kita memberi komentar pada ajakan lainnya dan me-lanjutkan baris ini:

$user_question_count = Users::question_count(1);

Ini mengembalikan integer yang merupakan besaran pertanyaan yang telah ditambahkan oleh pemakai dengan id 1.

Kita dapat membentuk variabel $user_question_count dan menjalankan index.php untuk memandang hasilnya.

Tugas 9: Memperbarui Jawaban oleh Pengguna

Konsep alih generasi dengan ORM Eloquent cukup sederhana. Pertama kita cari sebentuk record, arkian kita bermutasi dan menyimpan.

Sekarang, pada controller jawaban, kita me-lanjutkan guna ini:

<?php

public static function update_answer($answer_id,$new_answer)
    $answer = Answer::find($answer_id);
    $answer->answer = $new_answer;
    $updated = $answer->save();
    return $updated;

Di index.php, kita bisa menanggapi sarwa ajakan lainnya, dan memperbarui balasan dengan id 1 bagai ini:

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

Ini mengembalikan nilai boolean—true—jika alih generasi berhasil.

Tugas 10: Menghapus sebentuk Pertanyaan (Soft Delete)

Dalam beban akhir ini, kita akan menerapkan SoftDelete Eloquent.

Pertama, kita memberi ingat model pertanyaan untuk memakai SoftDeletes dengan mengimpor namespace SoftDeletes, dan akan datang memakai bawaan SoftDeletes di aras kita.

use Illuminate\Database\Eloquent\SoftDeletes;

Kemudian sehabis baris deklarasi kelas, kita me-lanjutkan baris ini:

use SoftDeletes;

Kemudian kita me-lanjutkan deleted_at ke eigendom protected $dates untuk model tersebut. Ini adalah langkah yang diperlukan.

protected $dates = [‘deleted_at’];

Model pertanyaan kita sekarang terlihat bagai ini:

<?php 
namespace Models;
use \Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Question extends Model 

use SoftDeletes; 
    protected $table = 'questions';
    protected $fillable = ['question','user_id'];


    public function answers()
    
        return $this->hasMany('\Models\Answer');
    
    
    
    public function user()
    
        return $this->belongsTo('\Models\User');
    

 

 ?>

Kemudian kita melahirkan guna delete_question pada controller pertanyaan.

<?php

public static function delete_question($question_id)

    $question = Question::find($question_id);
    $deleted = $question->delete();
    return $deleted; 



Jalankan di index.php:

$delete = Questions::delete_question(1);

Selamat! Anda baru sahaja membangun back end yang berfungsi penuh dengan Illuminate dan Eloquent. Dan kita tidak harus memahat begitu banyak aba-aba untuk mencapai sarwa ini.

Kode untuk tutorial ini dapat terdapat di GitHub.

Kesimpulan

Illuminate jua 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 pada Database Illuminate yang berdiri seorang diri adalah migrasi database, yang merupakan fitur artistik dari Laravel, dan Lumen, microframework oleh Laravel. Anda kudu mempertimbangkan untuk memakai keduanya di aplikasi Anda untuk memanfaatkan fitur berarti yang menyertainya.

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

Referensi

begitulah pembahasan tentang Menggunakan Database Illuminate dengan Eloquent di Aplikasi PHP Anda Tanpa Laravel semoga artikel ini bermanfaat salam

tulisan ini diposting pada tag mysql laravel join, laravel mysql join, laravel mysql inner join, , tanggal 25-08-2019, di kutip dari https://code.tutsplus.com/id/tutorials/using-illuminate-database-with-eloquent-in-your-php-app-without-laravel--cms-27247

Related Posts

Post a Comment