Advertisement
  1. Code
  2. Web Apps

استخدام مكتبة Illuminate مع Eloquent في تطبيق PHP دون استخدام Laravel

Scroll to top
Read Time: 13 min

Arabic (العربية/عربي) translation by Mohammed Taher (you can also view the original English article)

Illuminate هو محرّك قواعد البينات الخاص بـ Laravel، ويضمّ إطار العمل Eloquent الذي يعمل من خلال ربط العلاقات بالكائنات (ORM). إن كنت ترغب في بناء تطبيقات PHP مع أطر عمل تعمل من خلال ORM دون استخدام Laravel، فهذا الدرس مناسب لك.

في هذا الدرس، سنقوم ببناء واجهة خلفية لتطبيق لطرح اﻷسئلة واﻷجوبة باستخدام PHP، Illuminate و Eloquent ORM.

متطلبات المشروع:

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

إمكانيات التطبيق

سيؤدي تطبيقنا 10 مهام هي:

  • إضافة مستخدم.
  • إضافة سؤال.
  • إضافة إجابة على السؤال.
  • التصويت على سؤال.
  • الاستعلام عن سؤال مع اﻷجوبة المرتبطة به.
  • الاستعلام عن اﻷسئلة والمستخدمين الذين قاموا بطرح تلك اﻷسئلة.
  • الاستعلام عن أسئلة معينة، واﻷجوبة وعدد اﻷصوات الخاصة بتلك اﻷسئلة.
  • عدّ اﻷسئلة الخاصة بمستخدم معين.
  • تحديث اﻹجابة بواسطة المستخدم.
  • حذف سؤال معين.

في البداية، نُنشئ مجلد المشروع.

سننشئ في مجلد المشروع الرئيسي مجلدًا باسم app، وفي داخل المجلد app ننشئ مجلدين: models و controllers. في الصورة نرى أن اسم مجلد المشروع الرئيسي هو eloquent، ولك مطلق الحرية في استخدام أي اسم آخر.

Our project organizationOur project organizationOur project organization

بعد ذلك ننشئ ملفًا باسم index.php في المجلد الرئيسي للمشروع، في نفس المستوى الذي يتضمن المجلد app.

سنستخدم كذلك git، لذا سننشئ ملفً .gitignore، وهذه الخطوة اختيارية وليست إلزامية.

 بعد ذلك، نبدأ بتثبيت الاعتماديات المطلوبة لهذا المشروع. في المجلد الرئيسي، سننشئ ملف composer.json، ثم نلصق فيه الشيفرة التالية.

1
{
2
 “name”: “illuminate-example/eloquent”,
3
 “description”: “Implementation of Database Queries with illuminate and Eloquent”,
4
 “type”: “project”,
5
 “require”: {}
6
}

لتثبيت قاعدة بيانات Illuminate نضيف الشيفرة التالية إلى ملف composer.json:
“illuminate/database”: “5.1.8”,.

واﻵن نضيف psr-4 autoloading للنماذج والمتحكمات الخاصة بنا:

1
“autoload”: {
2
 “psr-4”: {
3
 “Controllers\\”: “app/controllers/”,
4
 “Models\\”: “app/models/” }
5
 }

وهكذا يكون محتوى ملف composer.json بالشكل التالي:

1
{
2
 “name”: “illuminate-example/eloquent”,
3
 “description”: “Implementation of Database Queries with illuminate and Eloquent”,
4
 “type”: “project”,
5
 “require”: {
6
 “illuminate/database”: “5.1.8”},
7
 “autoload”: 
8
    {“psr-4”: 
9
        { “Controllers\\”: “app/controllers/”,
10
            “Models\\”: “app/models/"
11
            
12
                 }
13
    }
14
}

سنقوم اﻵن بتنفيذ اﻷمرين التاليين الخاصين بـ composer في نفس المكان الذي يضمّ الملف composer.json:

1
composer install

2
composer dump-autoload -o

سيؤدي ذلك إلى إنشاء مجلد vendor الذي يمكن إضافته إلى ملف gitignore ليتم تجاهله من قبل Git (هذه الخطوة ليست إلزامية).

لنبدأ بإضافة ملف إعدادات يتضمن معلومات الوصول إلى قاعدة البيانات الخاصة بنا.

في المجلد الرئيسي للمشروع سننشئ ملفًا باسم config.php نعرف فيه المعلومات الخاصة بقاعدة البيانات، وبطبيعة الحالة، يجب عليك إدخال المعلومات الخاصة بك في هذا الملف.

1
<?php
2
3
defined(DBDRIVER)or define(DBDRIVER,mysql);
4
defined(DBHOST)or define(DBHOST,localhost);
5
defined(DBNAME)or define(DBNAME,eloquent-app);
6
defined(DBUSER)or define(DBUSER,root);
7
defined(DBPASS)or define(DBPASS,pass);

بعد ذلك، سنشرع في إنشاء المخطط الخاص بالتطبيق.

ولكن هناك ملاحظة واحدة يجب الانتباه إليها قبل الشروع إنشاء المخطط الخاص بجداول قاعدة البيانات وهو أننا قادرون على إضافة الختم الزمني إلى المخطط.

إذ يتوقع إطار العمل Eloquent وجود عمودين للأختام الزمنية إن كنا نرغب في تفعيل العمليات الخاصة باﻷختام الزمنية على نموذج أو جدول معين، وهذا العمودان هما created_at و updated_at. عند تفعيل اﻷختام الزمنية في النموذج، يعمد Eloquent إلى تحديث هذه الحقول تلقائيًا بالوقت الذي يتم فيه إنشاء أو تحديث السجلّ في قاعدة البيانات.

هناك أيضًا عمود ثالث يحمل اسم deleted_at، ولكنه طريقة عمله مختلفة قليلًا، إذ يقدم إطار Eloquent مبدأ الحذف المؤقت soft delete، حيث يعتمد على القيمة الموجودة في العمود deleted_at لتحديد ما إذا سيتم حذف السجلّ من قاعدة البيانات أم لا. إن قمت بحذف أي سجلّ من قاعدة البيانات باستخدام دالة الحذف الخاصة بـ Eloquent مع تفعيل خاصية الحذف المؤقت، سيتم تحديث العمود بالوقت الذي تمت فيه عملية الحذف، ويمكن بعد ذلك استرجاع السجلات المحذوفة في أي وقت.

في هذا التطبيق، سنستفيد من الأختام الزمنية؛ لذا سنستخدم الأعمدة الثلاثة في إنشاء المخطط الخاص بنا.

ابدأ بإنشاء الجداول مستخدمًا اﻷوامر التالية في MySQL:

اﻷسئلة

1
CREATE TABLE `questions` (
2
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
3
 `question` tinytext,
4
 `user_id` int(11) DEFAULT NULL,
5
 `created_at` timestamp NULL DEFAULT NULL,
6
 `updated_at` timestamp NULL DEFAULT NULL,
7
 `deleted_at` timestamp NULL DEFAULT NULL,
8
 PRIMARY KEY (`id`)
9
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

اﻹجابات

1
CREATE TABLE `answers` (
2
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
3
 `answer` tinytext,
4
 `user_id` int(11) DEFAULT NULL,
5
 `question_id` int(11) DEFAULT NULL,
6
 `created_at` timestamp NULL DEFAULT NULL,
7
 `updated_at` timestamp NULL DEFAULT NULL,
8
 `deleted_at` timestamp NULL DEFAULT NULL,
9
 PRIMARY KEY (`id`)
10
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

اﻷصوات

1
CREATE TABLE `upvotes` (
2
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
3
 `answer_id` int(11) DEFAULT NULL,
4
 `user_id` int(11) DEFAULT NULL,
5
 `created_at` timestamp NULL DEFAULT NULL,
6
 `updated_at` timestamp NULL DEFAULT NULL,
7
 `deleted_at` timestamp NULL DEFAULT NULL,
8
 PRIMARY KEY (`id`)
9
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

المستخدمون

1
CREATE TABLE `users` (
2
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
3
 `username` varchar(100) DEFAULT NULL,
4
 `email` varchar(200) DEFAULT NULL,
5
 `password` varchar(200) DEFAULT NULL,
6
 `created_at` timestamp NULL DEFAULT NULL,
7
 `updated_at` timestamp NULL DEFAULT NULL,
8
 `deleted_at` timestamp NULL DEFAULT NULL,
9
 PRIMARY KEY (`id`)
10
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

سنبدأ اﻵن بإنشاء الملفات الخاصة بالنماذج والمتحكمات الخاصة بالجداول التي أنشأناها، وذلك في اﻷماكن التالية:

  • 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

توجه في محرر النصوص إلى الملف models/database.php.

في البداية ننشئ الكبسولة:

1
<?php
2
3
namespace Models; 
4
use Illuminate\Database\Capsule\Manager as Capsule;
5
6
class Database {
7
8
    function __construct() {
9
    $capsule = new Capsule;
10
    $capsule->addConnection([
11
     driver => DBDRIVER,
12
     host => DBHOST,
13
     database => DBNAME,
14
     username => DBUSER,
15
     password => DBPASS,
16
     charset => utf8,
17
     collation => utf8_unicode_ci,
18
     prefix => ‘’,
19
    ]);
20
    // Setup the Eloquent ORM… 

21
    $capsule->bootEloquent();
22
}
23
24
}

في الملف السابق، أطلقنا الكبسولة وزوّدناها بالثوابت التي قمنا بتعريفها في ملف config.php، ثم أطلقنا إطار العمل eloquent.

الخطوة التالية هي إنشاء شيفرة تعمل عند بدء العمل، وسنكتب هذه الشيفرة في ملف بحيث يعمل كل شيء قبل شروع تطبيقنا بالعمل.

لذا سننشئ الملف التالي في مجلد المشروع باسم start.php وفي هذا الملف سنضيف ملف التحميل التلقائي autoload الخاص بـ Composer:

require ‘vendor/autoload.php’;

بعد ذلك، سنطلب الملف config.php للحصول على معلومات الاتصال بقاعدة البيانات: require ‘config.php’;

بعد ذلك نقوم بإعداد صنف قاعدة البيانات للشروع بالعمل.

1
<?php
2
3
use Models\Database;
4
5
//Boot Database Connection

6
new Database();

يجب أن يتضمن ملف start.php الشيفرة التالية:

1
<?php
2
require config.php;
3
require vendor/autoload.php;
4
use Models\Database;
5
//Initialize Illuminate Database Connection

6
new Database();
7
?>

بما أنّ ملف index.php سيكون الملف الرئيسي يجب تضمين الملف start.php فيه.

هكذا يصبح ملف index.php بالشكل التالي:

1
<?php
2
require start.php;
3
?>

اﻵن، يمكننا العمل على المتحكمات والنماذج، أضف التالي إلى الملف project_folder/app/models/question.php

1
<?php
2
3
namespace Models;
4
5
use \Illuminate\Database\Eloquent\Model;
6
7
class Question extends Model {
8
    
9
    protected $table = questions;
10
    
11
}
12
13
?>

ثم أضف ما يلي إلى project_folder/app/controllers/questions.php:

1
<?php
2
namespace Controllers;
3
4
class Questions{
5
    
6
}
7
8
?>

وكذلك اﻷمر في الملف project_folder/app/controllers/answers.php

1
<?php
2
namespace Controllers;
3
4
class Answers{
5
    
6
}
7
?>

المهمة اﻷولى: إضافة مستخدم

في النموذج الخاص بالمستخدمين (project_folder/app/models/user.php) أضف الشيفرة التالية لتعريف نطاق الأسماء الخاص بنا، ولكي يرث هذا الصنف من صنف Eloquent Model ولتعريف اسم الجدول (protected $table) والحقول التي يمكن تعبئتها من قبل المستخدم (protected $fillable).

1
<?php
2
namespace Models;
3
use \Illuminate\Database\Eloquent\Model;
4
5
class User extends Model {
6
    protected $table = users;
7
    protected $fillable = [username,email,pass];
8
}
9
?>

في المتحكم الخاص بالمستخدمين (project_folder/app/controllers/user.php) نعرّف نطاق اﻷسماء والصنف كالمعتاد:

1
<?php
2
namespace Controllers;
3
4
class Users{
5
    
6
}
7
?>

ثم ﻹنشاء مستخدم جديد، نستورد في المتحكم الخاص بالمستخدمين نطاق الأسماء الخاص بنموذج المستخدمين، وذلك من خلال الشيفرة: use Models\User; ثم إضافة دالة ﻹنشاء مستخدم جديد.

1
<?php
2
3
    public static function create_user($username, $email, $password){
4
        $user = User::create(['username'=>$username,'email'=>$email,'password'=>$password]);
5
        return $user;
6
    }

سيكون المتحكم الخاص بالمستخدمين بالشكل التالي:

1
<?php
2
3
namespace Controllers;
4
use Models\User;
5
6
class Users {
7
    
8
    public static function create_user($username, $email, $password){
9
        $user = User::create(['username'=>$username,'email'=>$email,'password'=>$password]);
10
        return $user;
11
    }
12
}
13
?>

بعد ذلك نضيف اﻷسطر التالية إل ملف index.php ثم نبدأ بتشغيل التطبيق ﻹنشاء مستخدم جديد.

1
<?php
2
3
use Controllers\Users; 
4
5
// Import user controller

6
$user = Users::create_user(user1,user1@example.com,user1_pass);

الخطوة الثانية: إضافة سؤال

لإضافة سؤال جديد نستورد نطاق الأسماء الخاص بنموذج اﻷسئلة ضمن المتحكم الخاص بالأسئلة، ثم نكتب دالة باسم create_question وظيفتها إنشاء أسئلة جديدة:

use Models\Question;

بعد ذلك:

1
<?php
2
3
public static function create_question($question,$user_id){
4
5
    $question = Question::create(['question'=>$question,'user_id'=>$user_id]);
6
    return $question;
7
}

لقد استخدمنا هنا خاصية اﻹسناد الشامل mass creation في Eloquent لإدراج المعلومات في سجلّأت قاعدة البيانات، ولكن لتعمل هذه الخاصية يجب إبار إطار العمل بالحقول التي يُسمح لها باستقبال هذه المعلومات؛ ذلك ﻷن نماذج Eloquent محمية بشكل افتراضي تجاه عملية الإسناد الشامل.

لذا توجّه إلى نموذج question وأضف خاصية protected $fillable إلى الصنف.

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

ولتشغيل هذا، قم باستيراد متحكم الأسئلة في ملف Index.php ثم استدع دالة create_question بشكل ساكن statically:

use Controllers\Question;

بعد ذلك أنشئ سؤالاً جديدًا بإضافة نص السؤال ومعرّف المستخدم كمعاملات:

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

إن تم هذا اﻷمر بنجاح، فسترجع الدالة عنصر نموذج model object.

واﻵن عليك بإضافة المزيد من المدخلات عن طريق إضافة أسئلة جديدة إلى قاعدة البيانات وذلك باستخدام الشيفرة الموجودة في ملف index.php.

الخطوة الثالثة: إضافة جواب إلى السؤال

هنا سنكرر الخطوات ذاتها التي اعتمدناها في نموذج اﻷسئلة والمستخدمين، وذلك بإضافة الشيفرة التالية:

1
<?php
2
namespace Models;
3
use \Illuminate\Database\Eloquent\Model;
4
5
class Answer extends Model {
6
    
7
    protected $table = answers;
8
    protected $fillable = [answer,user_id,question_id];
9
    
10
}
11
?>

ثم نضيف اﻷسطر التالية في متحكم اﻹجابات:

1
<?php
2
3
namespace Controllers;
4
use Models\Answer;
5
6
7
class Answers {
8
9
    public static function add_answer($answer,$question_id,$user_id){
10
        $answer = Answer::create(['answer'=>$answer,'question_id'=>$question_id,'user_id'=>$user_id]);return $answer;
11
    }
12
}
13
14
?>

ثم في ملف index.php، يمكن إنشاء إجابة خاصة بالسؤال ذي المعرف 1 والتابع للمستخدم ذي المعرف2، الذي قمنا بإنشائه قبل قليل. لا تنس أن تستورد المتحكم الخاص باﻹجابات في بداية ملف index.php.

1
<?php
2
3
use Controllers\Answers;
4
5
    $answers = Answers::add_answer(This is an answer,1,2);

لتتجنب إدخال معلومات متكررة، حول باقي اﻹيعازات في ملف index.php قبل أن تشغيل الشيفرة.

المهمة الرابعة: التصويت على اﻹجابة

سنكرر الخطوات ذاتها في هذه المهمة أيضًأ.

لذا سننسخ ما يلي إلى نموذج Upvote في الملف project_folder/app/models/upvote.php

1
<?php 
2
namespace Models;
3
4
use \Illuminate\Database\Eloquent\Model;
5
6
7
class Upvote extends Model {
8
9
    protected $table = 'upvotes';
10
    protected $fillable = ['answer_id','user_id'];
11
     
12
}
13
 ?>

ثم في المتحكم الخاص باﻹجابات، نستورد نطاق أسماء النموذج Upvote.

use Models\Upvote;

ثم ننشئ دالة upvote_answer.

1
<?php
2
3
    public static function upvote_answer($answer_id,$user_id){
4
        $upvote = Upvote::create(['answer_id'=>$answer_id,'user_id'=>$user_id]);
5
        return $upvote;
6
    }

يمكننا اﻵن استدعاء هذه الدالة من ملف index.php وذلك باستخدام معرف مستخدم وهمي للتصويت على الإجابة ذات المعرف 1.

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

الخطوة الخامسة: الاستعلام عن سؤال معين مع اﻷجوبة التابعة له

يمكن استخدام علاقات Eloquent لمثل هذه المهام.

ولهذه العلاقات أنواع مختلفة، مثل واحد لواحد one to one، واحد لمتعدد one to many، ومتعدد لمتعدد many to many وغيرها.

عند استخدام هذه العلاقات، يفترض Eloquent وجود مفتاح خارجي foreign key على هيئة (اسم النموذج_المعرف) في النماذج. في هذه المهمة سنستخدم علاقة واحد لمتعدد وذلك ﻷن السؤال الواحد يمكن أن يتضمن العديد من الإجابات.

في البداية نعرّف العلاقة من خلال إضافة الدالة التالية إلى نموذج اﻷسئلة.

1
<?php
2
3
public function answers()
4
{
5
    return $this->hasMany('\Models\Answer');
6
}

ثم في متحكم اﻷسئلة، نضيف الدالة التالية للاستعلام عن اﻷسئلة مع اﻹجابات التابعة لها.

1
<?php
2
3
public static function get_questions_with_answers(){
4
 
5
    $questions = Question::with('answers')->get()->toArray();
6
    return $questions;
7
}

وبهذا نحصل على اﻷسئلة المطلوبة والإجابات التابعة لكل سؤال.

في ملف index.php، حوّل جميع اﻹيعازات الخاصة بإنشاء سجلات جديدة إلى تعليقات، ثم نفّذ ما يلي:

$all = Questions::get_questions_with_answers();

لمشاهدة نتيجة هذا الاستعلام يمكننا استخدام الدالة var_dump أو print_r مع المتغير $all:

المهمة السادسة: الاستعلام عن جميع اﻷسئلة والمستخدمين الذين طرحوا تلك اﻷسئلة

هنا تكون العلاقة من نوع واحد لواحد، ذلك ﻷن السؤال الواحد يُطرح من قبل مستخدم واحد فقط، لذا سنضيف هذا إلى نموذج الأسئلة:

1
<?php
2
3
public function user()
4
{
5
    return $this->belongsTo(‘\Models\User);
6
}

ثم ننشئ دالة في متحكم اﻷسئلة ونستخدم الدالة with مع نموذج الأسئلة.

1
<?php
2
3
public static function get_questions_with_users(){
4
5
    $questions = Question::with('user')->get()->toArray();
6
    return $questions; 
7
}

في الملف index.php، حول جميع اﻹيعازات السابقة إلى تعليقات، ثم نفّذ ما يلي:

$all_with_users = Questions::get_questions_with_users();

المهمة السابعة: الاستعلام عن سؤال واحد مع اﻹجابات والتصويتات التابعة له

بداية، نعرّف علاقة بين اﻹجابات والتصويتات، وبما أن لسؤال يمكن أن يمتلك العديد من التصويتات، فإن العلاقة بينهما ستكون من نوع واحد لمتعدد.

لهذا، نضيف الدالة التالية إلى نموذج اﻹجابة:

1
<?php
2
3
public function upvotes()
4
{
5
    return $this->hasMany('\Models\Upvote');
6
}

ثم ننشئ في متحكم اﻷسئلة دالة خاصة للاستعلام عن المطلوب:

1
<?php
2
3
public static function get_question_answers_upvotes($question_id){
4
5
    $questions = Question::find($question_id)->answers()->with('upvotes')->get()->toArray();
6
    return $questions;
7
}

وكما هو الحال في الخطوات السابقة، حول جميع اﻹيعازات السابقة إلى تعليقات في ملف index.php، ثم نفّذ ما يلي:

$one_question = Questions::get_question_answers_upvotes(1);

يمكن طباعة قيمة المتغيرة $one_question لمشاهدة النتائج:

الخطوة الثامنة: الاستعلام عن عدد اﻷسئلة التابعة لمستخدم معين

في البداية نستورد نموذج السؤال في متحكم المستخدمين:

use Models\Question;

ثم نضيف الدالة التالية:

1
<?php
2
3
public static function question_count($user_id){
4
5
    $count = Question::where('user_id',$user_id)->count();
6
    return $count;
7
}

اﻵن حوّل جميع اﻹيعازات السابقة في ملف index.php إلى تعليقات، وأضف السطر التالي:

$user_question_count = Users::question_count(1);

سيرجع هذا اﻹيعاز عددًا صحيحًا يمثّل عدد اﻷسئلة التي تمت إضافتها من قبل المستخدم الذي يحمل المعرف 1.

يمكن طباعة قيمة المتغير $user_question_count وتشغيل الملف index.php لمشاهدة النتائج.

المهمة التاسعة: تحديث السؤال من قبل المستخدم

إنّ مبدأ التحديث في Eloquent بسيط جدًّا، ويتلخص بالتالي: في البداية نبحث عن السجل المطلوب تحديث، ثم نقوم بإجراء التعديلات المطلوبة ثم الحفظ.

أضف الدالة التالية إلى متحكم اﻷسئلة:

1
<?php
2
3
public static function update_answer($answer_id,$new_answer){
4
    $answer = Answer::find($answer_id);
5
    $answer->answer = $new_answer;
6
    $updated = $answer->save();
7
    return $updated;
8
}

في ملف index.php حوّل جميع اﻹيعازات السابقة إلى تعليقات ثم حدّث الإجابة ذات المعرف 1 بالشكل التالي:

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

سيرجع هذا اﻹيعاز قيمة منطقية (true) إن تمت عملية التحديث بنجاح.

المهمة العاشرة: حذف سؤال معين (الحذف المؤقت)

هذه هي المهمة اﻷخيرة، وسنستخدم فيها خاصية الحذف المؤقت SoftDelete التابعة لـ Eloquent.

في البداية يجب إخبار نموذج اﻷسئلة باستخدام الحذف المؤقت SoftDeletes من خلال استيراد نطاق اﻷسماء SoftDeletes واستخدام سمة SoftDeletes في الصنف.

use Illuminate\Database\Eloquent\SoftDeletes;

ثم بعد سطر التصريح السابق، أضف السطر التالي:

use SoftDeletes;

ثم نضيف deleted_at إلى خاصية protected $dates ضمن النموذج، وبهذا يتم تفعيل خاصية الحذف المؤقت.

protected $dates = [‘deleted_at’];

وبهذا يصبح نموذج اﻷسئلة بالشكل التالي:

1
<?php 
2
namespace Models;
3
use \Illuminate\Database\Eloquent\Model;
4
use Illuminate\Database\Eloquent\SoftDeletes;
5
class Question extends Model {
6
7
use SoftDeletes; 
8
    protected $table = 'questions';
9
    protected $fillable = ['question','user_id'];
10
11
12
    public function answers()
13
    {
14
        return $this->hasMany('\Models\Answer');
15
    }
16
    
17
    
18
    public function user()
19
    {
20
        return $this->belongsTo('\Models\User');
21
    }
22
23
 }
24
25
 ?>

ننشئ اﻵن دالة delete_question في متحكم الأسئلة:

1
<?php
2
3
public static function delete_question($question_id){
4
5
    $question = Question::find($question_id);
6
    $deleted = $question->delete();
7
    return $deleted; 
8
9
}

نفذ ما يلي في ملف index.php:

$delete = Questions::delete_question(1);

تهانينا! لقد قمت بإنشاء واجهة خلفية تعمل بشكل كامل بواسطة Illuminate و Eloquent. هل لاحظت بأننا لم نكن بحاجة إلى كتابة الكثيرة من الشيفرات لتحقيق كل هذا.

يمكن الحصول على الشيفرة الخاصة بهذا المقال على GitHub.

ختاماً

يتضمن Illuminate كذلك Query Builder والذي يمكنك استخدامه لإجراء استعلامات أكثر تعقيداً، لذا يجدر بك التعرّف عليه واستخدامه في تطبيقاتك.

اﻷمر الوحيد الذي ينقص التطبيقات القائمة على قاعدة بيانات Illuminate هو خاصية تهجير قواعد البيانات database migrations، وهي خاصية مفيدة جدًّا في Laravel و Lumen وهو اﻷخ اﻷصغر لـ Laravel. لذا أنصحك باستخدام هذين اﻹطارين في تطبيقات والاستفادة من المزايا التي يقدمها كل منهما.

يمكنك الحصول على المزيد من المعلومات حول Eloquent في صفحة التوثيق الرسمي.

المصادر

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
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.