การสร้าง model และเรียกใช้งาน พร้อมแนวทางการประยุกต์ ตอนที่ 1

เขียนเมื่อ 8 ปีก่อน โดย Ninenik Narkdee
codeigniter 3 model codeigniter

คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ codeigniter 3 model codeigniter

ดูแล้ว 10,501 ครั้ง


ก่อนอื่นเพื่อความเข้าใจเบื้องต้น model ก็คือไฟล์ php ที่เราสร้างขึ้นเพื่อเก็บ class ชุดคำสั่งต่างๆ
ที่ต้องการใช้งาน เหมาะสำหรับใช้งานร่วมกับฐานข้อมูล อย่างเช่น ใช้ในการเพิ่ม ลบ แก้ไข 
หรือดึงรายการข้อมูลมาแสดง ซึ่งจริงๆ แล้วเราสามารถเขียนไว้ในไฟล์ controllers หรือ views ก้ได้
ดังนั้นการใช้งาน model ก็เป้นเพียงอีกทางเลือกหนึ่ง เพื่อให้การเขียนโค้ดของเราเป็นไปในรุปแบบ MVC มากขึ้น
 
ก่อนเข้าสู่รายละเอียดเพิ่มเติม ขออ้างอิงจากเนื้อหาตอนที่แล้ว
 
codeigniter กับ การเชื่อมต่อฐานช้อมูล และการเพิ่ม ลบ แก้ไข แสดงรายการ 
 
ในตอนที่แล้วเราทำการแสดงรายการ เพิ่ม ลบ แก้ไข ข้อมูล จากฐานข้อมูลในรูปแบบเบื้องต้นไปแล้ว
เป็นการทำเกี่ยวกับระบบสมาชิกผู้ดูแลระบบ
 
สำหรับเนื้อหาในตอนนี้ เราจะมาสร้างส่วนจัดการเนื้อหาของเมนู บริการของเรา กัน
 
// ลิ้งค์หน้าบริการของเรา
http://localhost/learnci/service
// ลิ้งค์หน้าจัดการเนื้อหา "บริการของเรา" ของ admin
http://localhost/learnci/admin/service
 
ให้เราสร้างไฟล์ admin_service.php ในโฟลเดอร์ apps > views > admin 
ด้วยโค้ดตัวอย่างดังนี้
 
<div class="container">
    
Service 
<br><br>
<?php if($action==null){?>
<a href="<?=base_url('admin/service/create')?>" class="btn btn-primary btn-sm">Create</a>
<br><br>
<table class="table table-striped table-bordered table-condensed">
    <thead>
        <tr>
            <th width="50" class="text-center">#</th>
            <th>Title</th>
            <th width="150" class="text-center">Modify Date</th>
            <th width="150" class="text-center">Manage</th>
        </tr>
    </thead>
    <tbody>
       <?php for($i=1;$i<=5;$i++){?>
        <tr>
            <td class="text-center"><?=$i?></td>
            <td>Service <?=$i?></td>
            <td class="text-center"><?=date("Y-m-d H:i:s")?></td>
            <td class="text-center">
                <a href="<?=base_url('admin/service/edit/'.$i)?>" class="btn btn-success btn-sm">
                <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
                </a>
                &nbsp;&nbsp;
                 <a href="<?=base_url('admin/service/delete/'.$i)?>" class="btn btn-danger btn-sm">
                <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
                </a>
                
            </td>
        </tr>
        <?php } ?>
    </tbody>
</table>
<?php } ?>

<?php if($action=="create"){?>
<a href="<?=base_url('admin/service')?>" class="btn btn-warning btn-sm">< Back</a>
<br><br>
<form action="<?=base_url('admin/service/create')?>" method="post" enctype="multipart/form-data">
<table class="table table-bordered">
<thead>
    <tr class="active">
        <th colspan="2">Add New Service</th>
    </tr>
</thead>
<tbody>
    <tr >
        <th width="120">Title:</th>
        <td>
            <input type="text" name="service_title" style="width:500px;">
        </td>
    </tr>
    <tr>
        <th width="120">Detail:</th>
        <td>
        <textarea name="service_detail" cols="85" rows="10"></textarea>
        </td>
    </tr>    
    <tr>
        <th width="120">Images:</th>
        <td>
        <input type="file" name="service_image" >
        </td>
    </tr>    
    <tr>
        <th></th>
        <td>
            <input type="submit" class="btn btn-success btn-sm" name="btn_add" value="Add Service">
        </td>
    </tr>
</tbody>
</table>    
    

</form>
<?php } ?>


<?php if($action=="edit"){?>
<a href="<?=base_url('admin/service')?>" class="btn btn-warning btn-sm">< Back</a>
<br><br>
<form action="<?=base_url('admin/service/edit/'.$id)?>" method="post" enctype="multipart/form-data">
<table class="table table-bordered">
<thead>
    <tr class="active">
        <th colspan="2">Edit Service</th>
    </tr>
</thead>
<tbody>
    <tr >
        <th width="120">Title:</th>
        <td>
            <input type="text" name="service_title" style="width:500px;">
        </td>
    </tr>
    <tr>
        <th width="120">Detail:</th>
        <td>
        <textarea name="service_detail" cols="85" rows="10"></textarea>
        </td>
    </tr>    
    <tr>
        <th width="120">Images:</th>
        <td>
        <input type="file" name="service_image" >
        </td>
    </tr>    
    <tr>
        <th></th>
        <td>
            <input type="submit" class="btn btn-success btn-sm" name="btn_add" value="Edit Service">
        </td>
    </tr>
</tbody>
</table>   

        
</form>
<?php } ?>

<?php if($action=="delete"){?>
<a href="<?=base_url('admin/service')?>" class="btn btn-warning btn-sm">< Back</a>
<br><br>
<div class="bg-success text-center" style="padding:10px;">
    <p class="text-success">Delete data complete</p>
    <a href="<?=base_url('admin/service')?>" class="text-success">< Back > </a>
</div>
<?php } ?>

</div>
 
 
จากนั้นให้เราไปเพิ่มเมนูจัดการที่ไฟล์ admin_header.php ในโฟลเดอร์ apps > views > admin
 
<li><a href="<?=base_url('admin/service')?>">Service</a></li>  
 
ขอยกมาเฉพาะในส่วนของเมนูสมาชิก จะได้เป็น
 
        <?php if(isset($_SESSION['ses_admin_id']) && $_SESSION['ses_admin_id']!=""){?>
            <li><a href="<?=base_url('admin/user')?>">User</a></li>  
            <li><a href="<?=base_url('admin/service')?>">Service</a></li>  
            <li><a href="<?=base_url('admin/logout')?>">Logout</a></li>  
         <?php } ?>
 
 
เป็นอันเรียบร้อยในส่นของการวางโครงของไฟล์ admin_service.php 
และการกำหนดลิ้งค์ในไฟล์ admin_header.php
 

 

การสร้าง Model

 
ต่อไปเรามาดูในส่วนของการสร้าง model ไฟล์ เพื่อใช้สำหรับจัดการระบบ "บริการของเรา"
รุปแบบการกำหนดชื่อไฟล์ จะคล้ายกับ controllers ต้องเป็นภาษาอังกฤษ อักษรตัวแรกเป็นตัวใหญ่
โดยไฟล์ของ model จะอยู่ในโฟลเดอร์ apps > models
 
และในโฟลเดอร์ models เราสามารถสร้างโฟลเดอร์ย่อยเพื่อจัดเก็บ models เป็นหมวดหมู่ได้
ให้ทำตามดังนี้ สร้างโฟลเดอร์ชื่อ admin ไว้ในโฟลเดอร์ apps > models
จากนั้นสร้างไฟล์ Service_model.php ในโฟลเดอร์ admin และกำหนดโค้ดดังนี้
 
<?php
class Service_model extends CI_Model {

    public function __construct()
    {
        parent::__construct();
    }
    
    public function getlist(){
        echo "List";
    }    
    
    public function create(){
        echo "Create";
    }
    
    public function view(){
        echo "View";
    }    
    
    public function edit(){
        echo "Edit";
    }  
    
    public function delete(){
        echo "Delete";
    }        

}
 
สังเกตว่าเราจะกำหนดรูปแบบไฟล์ ในลักษณะ [ชื่อที่ต้องการ_model.php] เหตุผลเพื่อนำไปประยุกต์
ในการโหลด model เข้ามาใน controller
 
 

การโหลด model มาใช้งาน ใน controller

 
การโหลด model จะใช้งานคำสั่ง 
 
$this->load->model('model_name');
 
model_name ก็คือชื่อ class model ที่เรากำหนด 
 
จากไฟล์ของเรา ก็จะได้เป็น
 
$this->load->model('service_model');
 
 
และกรณีหากเรากำหนดโฟลเดอร์ย่อย สำหรับ model การโหลดมาใช้งานจะกำหนด
ได้ดังนี้ สมมติตามโปรเจ็คเรากำหนดไว้ในโฟลเดอร์ admin อีกที ก็จะได้เป้น
 
$this->load->model('admin/service_model');
 
*ต้องไม่เปิดหรือปิดด้วย / เช่น
 
$this->load->model('admin/service_model/');  // แบบนี้ไม่ถูกต้อง
$this->load->model('/admin/service_model');  // แบบนี้ไม่ถูกต้อง
 
 
และถ้าหากเราต้องการเปลี่ยนชื่อ เพื่อให้สะดวกในการเรียกใช้ ก็สามารถกำหนด ชื่อ object ที่ต้องการ
ใน parameter ตัวที่สอง เช่น
 
$this->load->model('admin/service_model','service'); 
// แบบนี้ก็จะใช้ service แทน service_model
 
 
ที่นี้เรามาประยุกต์การใช้งานกับโปรเจ็คของเรา เนื่องจากว่าในระบบ admin เราจะใช้งาน
controller แค่อันเดียว ดังนั้น เพื่อรองรับ การเรียกใช้ model หลายอัน จึงจำเป็นต้อง
กำหนดเงื่อนไขให้สอดคล้องกัน ดังนี้
 
เปิดไฟล์ Admin.php ในโฟลเดอร์ apps > controllers
แล้วให้ทำการเพิ่มนี้ลงไป
 
            $file_model=APPPATH.'/models/admin/'.ucfirst($admin_pages).'_model.php';
            if(file_exists($file_model))
            {
                $this->load->model('admin/'.$admin_pages.'_model');
            }    
 
โดยแทรกไว้ดังนี้
 
            // แสดงหน้า admin อย่างง่ายเมื่อมีการล็อกอิน และสร้าง session
            $data['title']="Admin Home";  
            $data['title_h1']="Page Admin Home";  
            $data['action']=$action;
            $data['id']=$id;
            $file_model=APPPATH.'/models/admin/'.ucfirst($admin_pages).'_model.php';
            if(file_exists($file_model))
            {
                $this->load->model('admin/'.$admin_pages.'_model');
            }            
            $this->load->view('admin/admin_header', $data);  
            $this->load->view('admin/admin_'.$admin_pages,$data);  
            $this->load->view('admin/admin_footer');  
 
 
หลักการคือ
 
$file_model=APPPATH.'/models/admin/'.ucfirst($admin_pages).'_model.php';
 
กำหนดตัวแปร $file_model เพื่อระบุ path ของไฟล์ model โดยชื่อจะต้องมีส่วนที่ตรงกับตัวแปร $admin_pages
และใช้ฟังก์ชั่น ucfirst() แปลงตัวอักษรแรกให้เป็นตัวใหญ่ ตัวอย่าง
สมมติเมื่อ ส่งคำว่า service มา ก็จะได้เป็น Service และมาต่อด้วย _model.php ก็จะได้ชื่อไฟล์
Service_model.php
สำหรับ APPPATH คือค่า contanst คือตำแหน่งของไฟลเดอร์ apps
เมื่อต่อส่วนต่างๆ ก็จะได้ path ของไฟล์ model ที่ต้องการ
 
จากนั้นใช้คำสั่ง file_exists()
 
            if(file_exists($file_model))
            {
                $this->load->model('admin/'.$admin_pages.'_model');
            }          
 
เพื่อครวจสอบว่ามีไฟล์ model นั้นหรือไม่ ถ้ามีก็ให้ทำการ โหลด model นั้นมาไว้ใช้งาน
 
ขอจบในส่วนของการสร้าง model และการประยุกต์การโหลดมาใช้ในโปรเจ็คไว้เท่านี้
ตอนต่อไปจะลงในรายละเอียดการเรียกใช้งาน


กด Like หรือ Share เป็นกำลังใจ ให้มีบทความใหม่ๆ เรื่อยๆ น่ะครับ



อ่านต่อที่บทความ









เนื้อหาที่เกี่ยวข้อง









URL สำหรับอ้างอิง





คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )







เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ