قاعدة بيانات CodeIgniter: التكوين، التحرير، التحديث، حذف البيانات

قاعدة بيانات Codeigniter

في البرنامج التعليمي السابق، قمنا بتغطية أساسيات السجل النشط لـ CodeIgniter وكيفية إدراج السجلات وتحديثها وحذفها وقراءتها من قاعدة البيانات. في هذا البرنامج التعليمي، سنقوم بإنشاء نماذج قاعدة بيانات واستخدام النماذج لإنشاء سجلات قاعدة البيانات وتحديثها. إذا كنت جديدًا تمامًا في العمل مع قواعد البيانات في CodeIgniter، فننصحك بقراءة البرنامج التعليمي السابق

تكوين قاعدة بيانات Codeigniter

سنبدأ بإنشاء قاعدة بيانات المشروع التعليمي. سنقوم بإنشاء قاعدة بيانات بسيطة لإدارة جهات الاتصالtails. سنقوم بإنشاء قاعدة بيانات بسيطة تحتوي على جدولين (2) لأسماء الأصدقاء والمدن التي يعيشون فيها. العلاقة بين pals والمدن هي علاقة فردية مع id في المدن كمفتاح أساسي وcity_id كمفتاح خارجي في جداول pals .

تشغيل فولوwing البرامج النصية لإنشاء قاعدة البيانات:

CREATE TABLE `pals` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `city_id` int(11) DEFAULT NULL,
  `contact_name` varchar(245) DEFAULT NULL,
  `contact_number` varchar(245) DEFAULT NULL,
  `email_address` varchar(245) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

لنقم الآن بإنشاء جدول المدن

CREATE TABLE `cities` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(245) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ;

نماذج قاعدة بيانات CodeIgniter

سنقوم الآن بإنشاء نماذج لقاعدة البيانات الخاصة بنا. النموذج هو الجزء M من MVC. يتعامل النموذج مع الوصول إلى البيانات ومعالجة البيانات ومنطق الأعمال.

في CodeIgniter، يجب على كل نموذج تحديد الأساليب التي سيدعمها. بدلاً من تكرار نفس الكود في كل نموذج، سنستفيد من الوراثة في البرمجة الشيئية وننشئ فئة نموذج أصل تحدد الطرق الأساسية التي نرغب في أن تدعمها نماذجنا.

يوضح الجدول أدناه الطرق التي سنحددها وكيف سيتم الوصول إلى البيانات.

S / N خدمة التوصيل الوصف
1 __إنشاء يحدد طريقة المنشئ التي تستدعي طريقة المنشئ الأصل
2 get_all استرداد كافة الحقول والسجلات من قاعدة البيانات دون أي شروط
3 get_by_id استرداد صف واحد من قاعدة البيانات باستخدام المفتاح الأساسي من نوع INT المسمى id
4 get_where يسترد كافة الحقول من قاعدة البيانات بناءً على المعايير
5 أدخل يقوم بإدراج سجل جديد في قاعدة البيانات
6 تحديث يقوم بتحديث سجل قاعدة بيانات موجود بناءً على المفتاح الأساسي من نوع INT المسمى id
7 حذف حذف سجل موجود من قاعدة البيانات بناءً على المفتاح الأساسي من نوع INT المسمى id

التاليwing تُظهر الصورة مخطط الفصل وكيفية ارتباط النماذج الفرعية Pals وCities بالنموذج الأصلي BaseModel.

نماذج قاعدة بيانات CodeIgniter

سنقوم بإنشاء نموذجين كما هو موضح في الصورة أعلاه

قم بإنشاء فئة BaseModel جديدة في application/models/BaseModel.php

أضف المتابعةwing الكود

<?php

class BaseModel extends CI_Model {

    protected $table = '';

    public function __construct() {
        parent::__construct();
    }

    public function get_all() {
        return $this->db->get($this->table)
                        ->result();
    }

    public function get_by_id($id) {
        return $this->db->get_where($this->table, array('id' => $id))
                        ->row();
    }

    public function get_where($where) {
        return $this->db->where($where)
                        ->get($this->table)
                        ->result();
    }

    public function insert($data) {
        return $this->db->insert($this->table, $data);
    }

    public function update($id, $data) {
        $this->db->where('id', $id);
        $this->db->update($this->table, $data);
    }

    public function delete($id) {
        $this->db->where('id', $id);
        $this->db->delete($this->table);
    }
}

هنا،

  • محمي $table = "; يحدد متغير محمي اسمه الجدول. سيتم ملء هذا بواسطة الفصل الفرعي المعني لتحديد الجدول الذي يجب أن تتفاعل معه أساليب فئة النموذج الأساسي لدينا.
  • الوظيفة العامة __construct() {...} تحدد طريقة المنشئ وتنفذ طريقة المنشئ للفئة الأصلية CI_Model.
  • يستخدم get_all() {…} مكتبة قاعدة البيانات وقيمة المتغير $table لتشغيل استعلام SELECT على قاعدة البيانات الخاصة بنا.
  • يحدد get_by_id($id) {...} طريقة استرداد صف واحد من قاعدة البيانات ويقبل المعلمة $id التي يجب أن تكون من نوع بيانات INT.
  • يحدد get_where($where) {...} طريقة الحصول التي تسمح لك بتعيين عبارة المكان.
  • إدراج($data) {...} يحدد طريقة الإدراج ويقبل معلمة الصفيف $data التي تحتوي على القيم المراد كتابتها في قاعدة البيانات.
  • التحديث($id, $data) {...} يحدد طريقة التحديث ويقبل معلمة الصفيف $data التي تحتوي على القيم المراد تحديثها في قاعدة البيانات.
  • حذف($id) {...} يحدد طريقة الحذف التي تقبل معلمة $id التي يجب أن تكون من نوع البيانات INT.

الآن بعد أن انتهينا من فئة النموذج الأصلي، فلننشئ نماذج Pals الخاصة بنا

قم بإنشاء ملف جديد في application/models/Pals.php

أضف المتابعةwing الكود

<?php

class Pals_model extends BaseModel {

    protected $table = 'pals';

    public function __construct() {
        parent::__construct();
    }

    public function get_by_id($id) {
        $this->db->where('pals.id', $id);
        $this->db->select('pals.*,cities.name');
        $this->db->from('pals');
        $this->db->join('cities', 'pals.city_id = cities.id');
        $query = $this->db->get();
        return $query->row();
    }

    public function get_all() {
        $this->db->select('pals.*,cities.name');
        $this->db->from('pals');
        $this->db->join('cities', 'pals.city_id = cities.id');
        $query = $this->db->get();
        return $query->result();
    }
}

هنا،

  • يقوم class Pals بتوسيع BaseModel {...} بتوسيع النموذج الأصلي BaseModel ويجعل جميع الطرق المحددة في BaseModel يتم الوصول إليها تلقائيًا إلى الفئة الفرعية.
  • محمي $table = 'pals'؛ يحدد اسم الجدول المرتبط بنموذجنا الأصلي
  • __construct() {...} يقوم بتهيئة المنشئ الأصلي
  • تتجاوز الوظيفة العامة get_by_id($id) {…} get_by_id لتوفير تطبيق مخصص خاص بنموذج Pals. يستخدم الاستعلام get_by_id صلة لاسترداد اسم المدينة من جدول المدن
  • تتجاوز الوظيفة العامة get_all() {...} طريقة get_all لتنفيذ استعلام ربط بين جدول pals وcity

قم بإنشاء ملف جديد في application/models/Cities.php

<?php
class Cities extends BaseModel {
    protected $table = 'cities';
    
    public function __construct() {
        parent::__construct();
    }
}

هنا،

محمي $table = 'المدن'؛ يحدد جدول قاعدة البيانات النموذجية.

كما ترون من الكود المذكور أعلاه، فإن الوراثة توفر لنا الكثير من الوقت عند العمل مع النماذج في CodeIgniter. في القسم التالي، سوف نتعلم

وحدات تحكم مدير الاتصالات

الآن بعد أن أنشأنا النماذج، فلنقم بإنشاء وحدات التحكم لتطبيقنا. سيكون لدينا وحدتي تحكم هما جهات الاتصال والمدن

لنبدأ بالمدن

قم بإنشاء ملف جديد Cities.php في دليل التطبيق/وحدات التحكم

أضف المتابعةwing الكود

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Cities extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->helper('url', 'form');
        $this->load->library('form_validation');
        $this->load->model('cities_model');
    }

    public function index() {
        $header['title'] = 'Cities Listing';
        $data['pals'] = $this->cities_model->get_all();

        $this->load->view('header',$header);
        $this->load->view('cities/index', $data);
        $this->load->view('footer');
    }

    public function create() {
        $header['title'] = 'Create City';
        
        $this->load->view('header',$header);
        $this->load->view('cities/create');
        $this->load->view('footer');
    }

    public function store() {
        $rules = array(
            array(
                'field' => 'name',
                'label' => 'City Name',
                'rules' => 'required'
            )
        );

        $this->form_validation->set_rules($rules);

        if ($this->form_validation->run() == TRUE) {
            $data = array('name' => $this->input->post('name'));
            $this->cities_model->insert($data);

            redirect(base_url('cities'));
        } else {
            $header['title'] = 'Create City';
            
            $this->load->view('header',$header);
            $this->load->view('cities/create');
            $this->load->view('footer');
        }
    }

    public function edit($id) {
        $header['title'] = 'Edit City';
        $data['city'] = $this->cities_model->get_by_id($id);

        $this->load->view('header', $header);
        $this->load->view('cities/edit', $data);
        $this->load->view('footer');
    }

    public function update($id) {
        $rules = array(
            array(
                'field' => 'name',
                'label' => 'City Name',
                'rules' => 'required'
            )
        );

        $this->form_validation->set_rules($rules);

        if ($this->form_validation->run() == TRUE) {
            $data = array('name' => $this->input->post('name'));
            $this->cities_model->update($id,$data);

            redirect(base_url('cities'));
        } else {
            $header['title'] = 'Edit City';
            $data['city'] = $this->cities_model->get_by_id($id);
            
            $this->load->view('header',$header);
            $this->load->view('cities/create',$data);
            $this->load->view('footer');
        }
    }

    public function delete($id) {
        $header['title'] = 'Delete City';
        $data['city'] = $this->cities_model->get_by_id($id);

        $this->load->view('header', $header);
        $this->load->view('cities/delete', $data);
        $this->load->view('footer');
    }

    public function destroy($id) {
        $this->cities_model->delete($id);

        redirect(base_url('cities'));
    }
}

هنا،

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

قم بإنشاء ملف Contacts.php آخر في التطبيق/وحدات التحكم

أضف المتابعةwing الكود

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Contacts extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->helper('url', 'form');
        $this->load->library('form_validation');
        $this->load->model('pals_model');
    }

    public function index() {
        $header['title'] = 'Contacts List';
        $data['pals'] = $this->pals_model->get_all();

        $this->load->view('header', $header);
        $this->load->view('contacts/index', $data);
        $this->load->view('footer');
    }

    public function create() {
        $this->load->model('cities_model');
        $header['title'] = 'Create Contact';
        $data['cities'] = $this->cities_model->get_all();

        $this->load->view('header', $header);
        $this->load->view('contacts/create', $data);
        $this->load->view('footer');
    }

    public function store() {
        $rules = array(
            array(
                'field' => 'contact_name',
                'label' => 'Contact Name',
                'rules' => 'required'
            ),
            array(
                'field' => 'contact_number',
                'label' => 'Contact Number',
                'rules' => 'required',
                'errors' => array(
                    'required' => 'You must provide a %s.',
                ),
            ),
            array(
                'field' => 'email_address',
                'label' => 'Email Address',
                'rules' => 'required'
            ),
            array(
                'field' => 'city_id',
                'label' => 'City',
                'rules' => 'required'
            )
        );

        $this->form_validation->set_rules($rules);

        if ($this->form_validation->run() == FALSE) {
            $this->load->model('cities_model');
            $header['title'] = 'Create Contact';
            $data['cities'] = $this->cities_model->get_all();

            $this->load->view('header', $header);
            $this->load->view('contacts/create', $data);
            $this->load->view('footer');
        } else {
            $data = array(
                'city_id' => $this->input->post('city_id'),
                'contact_name' => $this->input->post('contact_name'),
                'contact_number' => $this->input->post('contact_number'),
                'email_address' => $this->input->post('email_address'),
            );

            $this->pals_model->insert($data);

            redirect(base_url('contacts'));
        }
    }

    public function edit($id) {
        $this->load->model('cities_model');
        $header['title'] = 'Edit Contact';
        $data['cities'] = $this->cities_model->get_all();

        $data['pal'] = $this->pals_model->get_by_id($id);
 
        $this->load->view('header', $header);
        $this->load->view('contacts/edit', $data);
        $this->load->view('footer');
    }

    public function update($id) {
        $rules = array(
            array(
                'field' => 'contact_name',
                'label' => 'Contact Name',
                'rules' => 'required'
            ),
            array(
                'field' => 'contact_number',
                'label' => 'Contact Number',
                'rules' => 'required',
                'errors' => array(
                    'required' => 'You must provide a %s.',
                ),
            ),
            array(
                'field' => 'email_address',
                'label' => 'Email Address',
                'rules' => 'required'
            ),
            array(
                'field' => 'city_id',
                'label' => 'City',
                'rules' => 'required'
            )
        );

        $this->form_validation->set_rules($rules);

        if ($this->form_validation->run() == FALSE) {
            $this->load->model('cities_model');
            $header['title'] = 'Create Contact';
            $data['cities'] = $this->cities_model->get_all();

            $data['pal'] = $this->pals_model->get_by_id($id);

            $this->load->view('header', $header);
            $this->load->view('contacts/edit', $data);
            $this->load->view('footer');
        } else {
            $data = array(
                'city_id' => $this->input->post('city_id'),
                'contact_name' => $this->input->post('contact_name'),
                'contact_number' => $this->input->post('contact_number'),
                'email_address' => $this->input->post('email_address'),
            );

            $this->pals_model->update($id, $data);

            redirect(base_url('contacts'));
        }
    }

    public function delete($id) {
        $this->load->model('cities_model');
        $header['title'] = 'Delete Contact';
        $data['cities'] = $this->cities_model->get_all();

        $data['pal'] = $this->pals_model->get_by_id($id);

        $this->load->view('header',$header);
        $this->load->view('contacts/delete',$data);
        $this->load->view('footer');
    }
    
    public function destroy($id){
        $this->pals_model->delete($id);
        
        redirect(base_url('contacts'));
    }
}

طرق عرض مدير جهات الاتصال

لقد نظرنا بالفعل إلى النماذج والتحقق من الصحة في CodeIgniter في البرامج التعليمية السابقة. سوف نستخدم الكود الذي قمنا بتطويره في الدروس السابقة. من أجل الاكتمال، سوف نقوم بإعادة إنتاج الكود الذي أنشأناه في الدروس السابقة.

آراء طلبنا ستكون على النحو التالي

طرق عرض مدير جهات الاتصال

يمكنك تنزيل الكود الخاص بالمشاهدات أعلاه من خلال النقر على الرابط أدناه

تنزيل عروض مدير جهات الاتصال CodeIgniter

نبذة عامة

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

لقد أظهرنا المفاهيم باستخدام تطبيق عملي، وسنستمر في القيام بذلك في البرامج التعليمية القادمة عن طريق إضافة المزيد من الوظائف إلى التطبيق.