Codeسجل نشط في Igniter: استعلام الإدراج والتحديث والحذف

⚡ ملخص ذكي

Codeيُعدّ نمط Igniter Active Record نمط تصميم يسمح للنموذج بقراءة وكتابة قاعدة البيانات باستخدام سلاسل طرق بسيطة وآمنة. وهو يدعم عمليات الإدراج والاختيار والتحديث والحذف عبر محركات قواعد بيانات مختلفة دون الحاجة إلى إعادة كتابة التعليمات البرمجية، كما أنه يُحدد معلمات الإدخال لمنع حقن SQL.

  • 🔗 الفكرة الأساسية: يقوم Active Record بتغليف SQL في استدعاءات الأساليب مثل الإدراج، والحصول، والتحديث، والحذف.
  • 🛡️ تأمين: يتم تمرير القيم كمعاملات، مما يحمي من حقن SQL.
  • 🔄 الحمل: يعمل نفس الكود عبر جميع الأنظمة MySQL، وخادم SQL، وغيرها من خلال برامج تشغيل قواعد البيانات.
  • ⚙️ الإعداد: قم بتهيئة ملف database.php وقم بتحميل مكتبة قاعدة البيانات تلقائيًا.
  • أدخل: يقوم الأمر $this->db->insert('table', $data) بإنشاء وتشغيل عملية إدراج (INSERT).
  • 🔍 اختار: $this->db->get('table') تُرجع الصفوف التي سيتم تكرارها.
  • ✏️ تحديث وحذف: تُغيّر عبارة WHERE بالإضافة إلى عبارة التحديث أو الحذف الصفوف أو تزيلها.

CodeIgniter Active Record CRUD

تُعدّ البيانات شريان الحياة لمعظم التطبيقات. يجب تخزينها لتحليلها واستخلاص رؤى قيّمة منها، مما يُسهّل اتخاذ القرارات التجارية. تُخزّن البيانات عادةً في قاعدة بيانات. ومن أهمّ الاعتبارات عند التعامل مع قاعدة البيانات: الأمان، وسهولة الوصول، وتطبيقات لغة الاستعلامات البنيوية (SQL) الخاصة بكل مُورّد.

يُعدّ Active Record نمط تصميم يُسهّل التفاعل مع قاعدة البيانات بطريقة آمنة وفعّالة. ويتمتع Active Record بالمزايا التالية:

  • إدراج وتحديث وحذف السجلات باستخدام سلاسل طرق بسيطة.
  • يقوم بإرسال مدخلات المستخدم بشكل آمن باستخدام المعلمات.
  • يسمح لك بالعمل مع محركات قواعد بيانات متعددة مثل MySQL وخادم SQL بدون إعادة كتابة كود التطبيق.
  • Codeيستخدم برنامج Igniter برامج تشغيل خاصة بكل محرك قاعدة بيانات في الخلفية.

كيفية استخدام Active Record: مثال

في هذا الدرس التعليمي، سنستخدم قاعدة بيانات نموذجية تحتوي على جدولين، أحدهما للطلبات والآخر للتفاصيل. يفترض هذا الدرس التعليمي أن لديك MySQL تم تثبيت قاعدة البيانات وتشغيلها. قم بتشغيل البرامج النصية التالية لإنشاء قاعدة بيانات البرنامج التعليمي:

CREATE SCHEMA ci_active_record;

USE ci_active_record;

CREATE TABLE `order_details` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`order_id` int(11) DEFAULT NULL,
`item` varchar(245) DEFAULT NULL,
`quantity` int(11) DEFAULT '0',
`price` decimal(10,2) DEFAULT '0.00',
`sub_total` decimal(10,2) DEFAULT '0.00',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT = 1;

CREATE TABLE `orders` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date` timestamp NULL DEFAULT NULL,
`customer_name` varchar(245) DEFAULT NULL,
`customer_address` varchar(245) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT = 1;

ينشئ الكود أعلاه قاعدة بيانات باسم ci_active_record وجدولين، هما orders و order_details. وتُحدد العلاقة بين الجدولين من خلال العمود id في جدول orders والعمود order_id في جدول order_details.

Codeتكوين قاعدة بيانات Igniter

سنقوم الآن بتهيئة تطبيقنا للتواصل مع قاعدة البيانات هذه. افتح ملف تهيئة قاعدة البيانات الموجود في application/config/database.php وابحث عن الأسطر التالية:

'hostname' => 'localhost',
'username' => '',
'password' => '',
'database' => '',

قم بتحديث الكود أعلاه إلى ما يلي:

'hostname' => 'localhost',
'username' => 'root',
'password' => 'letmein',
'database' => 'ci_active_record',

ملاحظة: ستحتاج إلى استبدال اسم المستخدم وكلمة المرور بالبيانات التي تطابق بياناتك MySQL ترتيب.

بالإضافة إلى تفاصيل تكوين قاعدة البيانات، نحتاج أيضًا إلى إخبار Codeيقوم برنامج Igniter بتحميل مكتبة قاعدة البيانات عند تحميلها.

الخطوة 1) افتح الملف التالي: application/config/autoload.php.

الخطوة 2) حدد موقع مكتبات مفاتيح المصفوفة $autoload وقم بتحميل مكتبة قاعدة البيانات كما هو موضح أدناه:

$autoload['libraries'] = array('database');

هنا:

  • يقوم الكود أعلاه بتحميل مكتبة قاعدة البيانات عند بدء تشغيل التطبيق.

Codeإدراج سجل نشط في برنامج الإشعال

لأغراض الاختبار، سنقوم بإنشاء وحدة تحكم وتحديد مسارات للتفاعل مع تطبيقنا عبر Active Record. أنشئ ملفًا جديدًا باسم application/controllers/ActiveRecordController.php وأضف الكود التالي:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class ActiveRecordController extends CI_Controller {
public function store_order(){
$data = [
'date' => '2018-12-19',
'customer_name' => 'Joe Thomas',
'customer_address' => 'US'
];

$this->db->insert('orders', $data);

echo 'order has successfully been created';
}
}

هنا:

  • $data = […] يحدد متغير مصفوفة data الذي يستخدم أسماء أعمدة جدول قاعدة البيانات كمفاتيح للمصفوفة ويعين لها قيمًا.
  • يستدعي الأمر `$this->db->insert('orders', $data);` دالة الإدراج (insert) الخاصة بمكتبة قاعدة البيانات، مع تمرير اسم الجدول `orders` ومتغير المصفوفة `$data`. يُنشئ هذا السطر عبارة SQL INSERT باستخدام مفاتيح المصفوفة كأسماء الحقول وقيم المصفوفة كقيم مُراد إدراجها.

بعد إنشاء دالة التحكم، نحتاج إلى إنشاء مسار لاستدعائها لتنفيذها. افتح الملف application/config/routes.php وأضف السطر التالي:

$route['ar/insert'] = 'activerecordcontroller/store_order';

هنا:

  • نقوم بتعريف مسار ar/insert الذي يستدعي طريقة store_order الخاصة بـ ActiveRecordController.

لنبدأ الآن تشغيل خادم الويب لاختبار طريقتنا. شغّل الأمر التالي لبدء تشغيل خادم PHP المدمج:

cd C:\Sites\ci-app
php -S localhost:3000

هنا:

  • يستعرض الأمر أعلاه دليل المشروع ويبدأ تشغيل الخادم المدمج على المنفذ 3000.

قم بتحميل ما يلي URL في متصفحك: http://localhost:3000/ar/insert. سوف تحصل على النتيجة التالية:

order has successfully been created

فتح MySQL قم بزيارة قاعدة بيانات البرنامج التعليمي وتحقق من جدول الطلبات. سترى الصف الذي تم إنشاؤه حديثًا، كما هو موضح في الصورة أدناه:

تم إدراج صف طلب جديد عبر Active Record

Codeسجل نشط لتحديد المُشغِّل

في هذا القسم، سنتعرف على كيفية قراءة السجلات من قاعدة البيانات وعرضها في متصفح الويب كقائمة غير مرتبة. أضف الدالة التالية إلى ActiveRecordController:

public function index() {
$query = $this->db->get('orders');

echo "<h3>Orders Listing</h3>";
echo "<ul>";

foreach ($query->result() as $row) {
echo "<li>$row->customer_name</li>";
}

echo "</ul>";
}

هنا:

  • $query = $this->db->get('orders'); يقوم بتشغيل استعلام التحديد على جدول الطلبات، وتحديد جميع الحقول.
  • صدى " قائمة الطلبات "; يعرض عنوان HTML.
  • صدى " "; يطبع الوسم الافتتاحي لقائمة HTML غير مرتبة.
  • foreach ($query->result() as $row) {…} تقوم بالمرور على النتائج المُعادة من قاعدة البيانات، ثم تُطبع " اسم العميل $row->customer_name "; يطبع اسم_العميل.

قبل تحميل URLيمكنك إضافة بضعة سجلات أخرى إلى قاعدة البيانات. لنُعرّف الآن مسارًا لاستعلام SELECT. افتح الملف application/config/routes.php وأضف المسار التالي:

$route['ar'] = 'activerecordcontroller';

هنا:

  • يشير المسار ar إلى دالة index الخاصة بفئة ActiveRecordController. هذا هو المسار الافتراضي، ولهذا السبب لم نحدد دالة index، كما فعلنا مع المسار الذي يُدرج السجلات.

بافتراض أن خادم الويب قيد التشغيل بالفعل، قم بتحميل ما يلي URL: http://localhost:3000/arستظهر لك نتائج مشابهة لما يلي في متصفح الويب الخاص بك:

قائمة الطلبات المختارة عبر السجل النشط

Codeتحديث سجل Active Record الخاص بـ Igniter

في هذا القسم، سنتحدث عن كيفية استخدام Active Record لتحديث قاعدة البيانات. لنفترض أننا نريد تحديث اسم العميل "جو توماس" إلى "جو". أضف الدالة التالية إلى فئة ActiveRecordController:

public function update_order() {
$data = [
'customer_name' => 'Joe',
];
$this->db->where('id', 1);
$this->db->update('orders', $data);
echo 'order has successfully been updated';
}

هنا:

  • $data = […] يحدد الحقول والقيم التي نرغب في تحديثها في جدول قاعدة البيانات.
  • $this->db->where('id', 1); يحدد شرط where في استعلام التحديث.
  • $this->db->update('orders', $data); يقوم بإنشاء استعلام تحديث SQL وتنفيذه على قاعدة البيانات الخاصة بنا.

ينتج الكود أعلاه عبارة SQL التالية:

UPDATE orders SET customer_name = 'Joe' WHERE id = 1;

لنقم الآن بتحديث ملف application/config/routes.php وإضافة المسار التالي:

$route['ar/update'] = 'activerecordcontroller/update_order';

احفظ التغييرات وقم بتحميل ما يلي URL في متصفح الويب:

تم تحديث الطلب بنجاح

لنقم الآن بعرض سجلات قاعدة البيانات ونرى ما إذا كان التغيير قد دخل حيز التنفيذ.

قائمة الطلبات التي تعرض الاسم المحدث

كما ترون في الصورة أعلاه، تم تحديث السجل الأول من جو توماس إلى جو.

Codeحذف سجل نشط من Igniter

سنقوم الآن بحذف سجل من قاعدة البيانات. سنحذف السجل الذي يحمل المعرّف 3. أضف الدالة التالية إلى وحدة التحكم ActiveRecordController:

public function delete_order() {
$this->db->where('id', 3);
$this->db->delete('orders');

echo 'order has successfully been deleted';
}

هنا:

  • $this->db->where('id', 3); يحدد شرط الشرط.
  • يقوم الأمر $this->db->delete('orders'); بحذف صف قاعدة البيانات في جدول الطلبات بناءً على المعايير المحددة باستخدام عبارة where.

لتنفيذ الكود أعلاه، قم بتحميل ما يلي URL في متصفح الويب الخاص بك: http://localhost:3000/ar/delete.

الأسئلة الشائعة

يربط Active Record القيم كمعاملات بدلاً من دمجها في سلسلة SQL، لذا لا يمكن لمدخلات المستخدم تغيير بنية الاستعلام. هذا مخرجping يحدث ذلك تلقائيًا عند الإدراج والتحديث والاستعلام عن مكان الإدراج.

نعم. يقوم Active Record بإنشاء استعلامات SQL من خلال برنامج تشغيل لكل محرك، لذا فإن التبديل من MySQL عادةً ما يعني الانتقال إلى SQL Server تغيير التكوين، وليس رمز النموذج، طالما أنك تتجنب استخدام SQL الخاص بالبائع.

تحدد عبارة WHERE الصفوف التي يؤثر عليها البيان. وبدونها، يتم تنفيذ عملية التحديث أو الحذف على كل صف في الجدول، وهو خطأ شائع ومكلف.

نعم. يمكن للذكاء الاصطناعي إعادة كتابة استعلامات SELECT وINSERT وUPDATE وDELETE لتصبح سلسلة استعلامات get وinsert وupdate وdelete مكافئة. اختبر النتيجة، لأن عمليات الربط المعقدة قد تتطلب استخدام أداة إنشاء الاستعلامات بدلاً من Active Record البسيط.

تتيح خاصية التحميل التلقائي لمكتبة قاعدة البيانات إمكانية الوصول إلى `$this->db` في جميع وحدات التحكم والنماذج دون الحاجة إلى تحميلها في كل مرة. وهذا مفيدٌ للغاية عندما يكون معظم التطبيق يتعامل مع قاعدة البيانات.

تلخيص هذه التدوينة بـ: