วิธีการ Insert , edit ,delete โดยผ่านตัว Model Laravel Framework

PHP Knowledge เป็น บอร์ดรวามความรู้ php เน้นบทความ แนวทางการเขียนโปรแกรม บันทึกกันลืม เพื่อให้สมาชิกได้เขียนความรู้ที่ตัวเองมีให้สมาชิกท่านอื่นๆ ได้ เข้ามาอ่าน และ ไว้อ่านเองกันลืมด้วย

Moderator: mindphp, ผู้ดูแลกระดาน

makup
PHP Super Member
PHP Super Member
โพสต์: 398
ลงทะเบียนเมื่อ: 05/10/2020 10:02 am

วิธีการ Insert , edit ,delete โดยผ่านตัว Model Laravel Framework

โพสต์ที่ยังไม่ได้อ่าน โดย makup »

ในบทความนี้ จะมาให้ความรู้เกี่ยวกับวิธีการ Insert , edit ,delete โดยผ่านตัว Model Laravel Framework , ว่าหลักการทำงานของการจัดการฐานข้อมูล มีลักษณะการทำงานอย่างไร , ซึ่ง การเพิ่มข้อมูล , แก้ไขข้อมูล , ลบข้อมูล มีอยู่ 2 แบบ , แบบแรกคือ Database: Query Builder , แบบที่สองคือ การ Insert , edit ,delete ผ่านตัว Model Laravel Framework , ซึ่งบทความนี้จะเป็นประโยชน์สำหรับผู้ที่เริ่มต้นศึกษา Laravel Framework หรือ ผู้ที่สนใจอยากเรียนรู้หรือศึกษาเพิ่มเติมต่อ

วิธีการ Insert โดยผ่านตัว Model Laravel Framework

Step 1 - ให้เข้าไปที่ route/web.php , ให้ไปตั้งค่า Routing สำหรับ Insert
112.JPG
112.JPG (16.93 KiB) Viewed 4568 times
ตัวอย่าง Code :

โค้ด: เลือกทั้งหมด

Route::post('/createAirline','Controller_show_airline@store');
Step 2 - ให้เข้าไปที่ Folder resources\views และทำการสร้าง File createAirline.blade.php , เพื่อทำการสร้าง Form สำหรับการเพิ่มข้อมูล
113.JPG
113.JPG (21.51 KiB) Viewed 4568 times
114.JPG
114.JPG (39.53 KiB) Viewed 4568 times
ตัวอย่าง Code Form createAirline.blade.php:

โค้ด: เลือกทั้งหมด

<div class="table-responsive">
    <h2>เพิ่มข้อมูลตารางสายการบิน</h2>
    <form action="/createAirline" method="post" enctype="multipart/form-data">   <!-- enctype="multipart....  ไว้สำหรับการ Upload ข้อมูล -->
        {{csrf_field()}}
        <div class="form-group">
            <label for="name_airline">ชื่อสายการบิน</label>
            <input type="text" class="form-control" name="name_airline" id="name_airline" placeholder="Name Airline">
        </div>
        <div class="form-group">
            <label for="description">ชื่อบริษัทสายการบิน</label>
            <input type="text" class="form-control" name="name_comp" id="name_comp" placeholder="Name Company">
        </div>
         <div class="form-group">
            <label for="image">รูปภาพ</label>
            <input type="file" class="form-control"  name="image_name" id="image">
        </div>
        <button type="submit" name="submit" class="btn btn-success">Submit</button>
    </form>
</div>
Step 3 - ให้เข้าไปที่ resources\views\showAirline.blade.php , แล้วทำการเพิ่มปุ่ม เพิ่มข้อมูลลงไป โดยให้วิ่งไปที่ href="/createAirline" Route ที่ไว้สำหรับทำการเพิ่มข้อมูล
115.JPG
115.JPG (35.38 KiB) Viewed 4568 times
ตัวอย่าง Code :

โค้ด: เลือกทั้งหมด

<div class="d-flex flex-column flex-md-row align-items-center p-3 px-md-4 mb-3 bg-white border-bottom shadow-sm">
      <a href="/createAirline" class="btn btn-primary">เพิ่มข้อมูล</a>
</div>
Step 4 - ให้เปิด Command prompt ขึ้นมา , หลังจากนั้น ก็ใช้คำสั่งสร้าง Controller โดยจะใช้ --resource ในการสร้าง Function insert , edit ,delete ให้อัตโนมัติ , โดยใช้คำสั่งดังนี้


ตัวอย่าง Code :

โค้ด: เลือกทั้งหมด

php artisan make:controller Controller_show_airline.php --resource
Step 5 - จากนั้นให้เข้าไปที่ app\Http\Controllers\Controller_show_airline.php ที่เราได้ทำการสร้างเอาไว้
116.JPG
116.JPG (30.92 KiB) Viewed 4568 times

Step 6 - จากนั้นไปที่ Function store ที่ใช้สำหรับในการเพิ่มข้อมูล โดยเราจะเพิ่มคำสั่งดังนี้ในการเพิ่มข้อมูลลงไป
117.JPG
117.JPG (52.28 KiB) Viewed 4568 times
ตัวอย่าง Code Function store() :

โค้ด: เลือกทั้งหมด

  public function store(Request $request)
    {
         $request->validate([                                    
        'name_airline' => 'required',
        'name_comp' => 'required', 
        'image_name' => 'required|file|image|mimes:jpeg,png,jpg|max:5000', 
                                                                            
        //dd($request->name);
    
        ]);
        
        

        //--------------------- Convert to image -------------------------//

        $stringImageReformat=base64_encode('_'.time());                 //หากมีการ upload ชื่อ file ซ้ำ ให้ทำการเข้ารหัส base64_encode() ...
                                                                        //.... เช่น a.jpg = axafaf.jpg พอ upload ซ้ำ ก็จะได้ a.jpge = asfff.jpg ....
                                                                        //....  มีการกำหนด string '__' แล้วใช้ Function time() ใช้ตรวจสอบ วันที่ Upload file 
        //dd($stringImageReformat);

        $ext = $request->file('image_name')->getClientOriginalExtension();   //ดึงนามสกุล file เข้ามาทำงาน โดยใช้ Function getClientOriginalExtension() ....
                                                                             //... จะมีการ Return ค่า กลับไปยัง ชื่อ File เดิม ที่ uploade แล้ว ซึ่ง .... 
                                                                            //... ชื่อเดิมก็คือ ค่า empty , ก็จะเหลือแค่ นามสกุล File ที่เอาไว้ใช้งาน
        //dd($ext);

        $imagename = $stringImageReformat.".".$ext;                     //ทำการรวมตัวแปร $ext กับ $stringImageReformat

        //dd($imagename);                                                 //สุ่มเข้ารหัสไปเรื่อยๆ เช่น "XzE1OTA3MDQyMzc=.jpg"


        //--------------------- Upload File ใน Local(Your computer) เพื่อ นำ File มาแสดงข้อมูล -------------------------//

        //ต้นทาง
        $imageEncoded = File::get($request->image_name);                                   //เรียกใช้งาน Module File โดยเอา File ภาพ ไปเก็บไว้ในตัวแปร , ส่วน ....
                                                                                           //... $request รับค่ามาจาก Form view , ส่วน image_name คือ ชื่อ Form view
        //ปลายทาง
        Storage::disk('local')->put('public/airline_image/'.$imagename,$imageEncoded);     //Upload File ไปเก็บไว้ใน Folder ปลายทาง โดยระบุปลายทาง public/airline_image/
                                                                                           //ref - https://laravel.com/docs/6.x/filesystem#storing-files

        //--------------------- Insert -------------------------//

        $airline = New Airline;
        $airline->name_airline = $request->name_airline;
        $airline->name_comp = $request->name_comp;
        $airline->image = $imagename;                                                   //ไม่ได้จะเอา File จากการ Upload file ไปเก็บไว้ใน Tables ....
                                                                                        //... แต่จะเอาแค่ $imagename ไปเก็บไว้ใน Tables เฉยๆ

        $airline->save();
       

        //--------------------- flash message -------------------------//
        Session()->flash("success","บันทึกข้อมูลเรียบร้อยแล้ว !");                              //สร้าง สถานะ action ไว้สำหรับแจ้งเตือนข้อความ เช่น เพิ่มข้อมูล,แก้ไข,ลบ ...
                                                                                        //... ส่งการแจ้งเตือนไปยัง resources/view/layouts/master.blade.php

                                                                                        //- ref - https://laravel.com/docs/7.x/session#flash-data

        return redirect('/showAirline');
    }

Step 7 - จากนั้นก็กลับไปที่หน้า Form view showAirline.blade.php
118.JPG
118.JPG (37.42 KiB) Viewed 4568 times

Step 8 - แล้วทำการกดปุ่มเพิ่มข้อมูลลงไป
119.JPG
119.JPG (13.68 KiB) Viewed 4568 times
ผลลัพธ์ที่ได้
119-1.JPG
119-1.JPG (28.73 KiB) Viewed 4568 times
120.JPG
120.JPG (45.84 KiB) Viewed 4568 times

************* มี Post ต่อจาก Post เดิม **************
makup
PHP Super Member
PHP Super Member
โพสต์: 398
ลงทะเบียนเมื่อ: 05/10/2020 10:02 am

Re: วิธีการ Insert , edit ,delete โดยผ่านตัว Model Laravel Framework

โพสต์ที่ยังไม่ได้อ่าน โดย makup »

วิธีการ edit โดยผ่านตัว Model Laravel Framework

Step 1 - ให้เข้าไปที่ route/web.php , ให้ไปตั้งค่า Routing สำหรับ edit , เพื่อแสดงข้อมูลที่ต้องการจะแก้ไข
121.JPG
121.JPG (17.59 KiB) Viewed 4567 times
ตัวอย่าง Code :

โค้ด: เลือกทั้งหมด

Route::get('/editAirline/{id}', 'Controller_show_airline@edit');
Step 2 - ให้เข้าไปที่ Folder resources\views และทำการสร้าง File EditAirline.blade.php , เพื่อทำการสร้าง Form สำหรับการแสดงข้อมูล
ในส่วนที่ต้องการจะแก้ไขข้อมูล
122.JPG
122.JPG (32.99 KiB) Viewed 4567 times
ตัวอย่าง Code Form EditAirline.blade.php:

โค้ด: เลือกทั้งหมด

 <div class="table-responsive">
    <h2>แก้ไขตารางสายการบิน</h2>
    <form action="/updateAirline/{id}" method="post" enctype="multipart/form-data">   <!-- enctype="multipart....  ไว้สำหรับการ Upload ข้อมูล -->
        {{csrf_field()}}
        <div class="form-group">
            <label for="name_airline">ชื่อสายการบิน</label>
            <input type="text" class="form-control" name="name_airline" id="name_airline" placeholder="name_airline" value="">
        </div>
        <div class="form-group">
            <label for="name_comp">ชื่อบริษัทสายการบิน</label>
            <input type="text" class="form-control" name="name_comp" id="name_comp" placeholder="name_comp" value="">
        </div>

       

    <h2>Current Logo</h2>
    <div>
        <img src="" alt="" width="150px" height="150px"> 
    </div>

        <div class="form-group">
            <label for="image">เลือก File ภาพ</label>
            <input type="file" class="form-control"  name="image_name" id="image">
        </div>

        <button type="submit" name="submit" class="btn btn-success">Submit</button>
    </form>
</div>
Step 3 - - จากนั้นให้เข้าไปที่ app\Http\Controllers\Controller_show_airline.php ที่เราได้ทำการสร้างเอาไว้เรียบร้อยแล้ว



Step 4 - - แล้วให้ไปที่ Function edit() , เพื่อจะต้องการให้แสดงข้อมูลในส่วนที่ต้องการจะแก้ไข , โดยมีการโยนค่า editAirline เข้าไปทำงานในหน้า EditAirline.blade.php , ดัง Code ตัวอย่างนี้
123.JPG
123.JPG (34.78 KiB) Viewed 4567 times
ตัวอย่าง Code Function edit() :

โค้ด: เลือกทั้งหมด

public function edit($id)
    {
        $editAirline = Airline::find($id);
        //dd($editAirline);
        return view('EditAirline')->with('editAirline',$editAirline);
    }
Step 5 - ให้กลับไปหน้า Form EditAirline.blade.php , เพื่อทำการใส่คำสั่ง {{$editAirline->colums}} เพื่อที่จะเอาไว้ในแสดงข้อมูลในส่วนที่ต้องการแก้ไข , แล้วใช้คำสั่ง asset ในการเข้าถึงรูปภาพที่ต้องการจะแก้ไขด้วย
124.JPG
124.JPG (125.46 KiB) Viewed 4567 times
ตัวอย่าง Code Form EditAirline.blade.php มีการแสดงข้อมูลที่ต้องการแก้ไข :

โค้ด: เลือกทั้งหมด

<div class="table-responsive">
    <h2>แก้ไขตารางสายการบิน</h2>
    <form action="/updateAirline/{{$editAirline->id}}" method="post" enctype="multipart/form-data">   <!-- enctype="multipart....  ไว้สำหรับการ Upload ข้อมูล -->
        {{csrf_field()}}
        <div class="form-group">
            <label for="name_airline">ชื่อสายการบิน</label>
            <input type="text" class="form-control" name="name_airline" id="name_airline" placeholder="name_airline" value="{{$editAirline->name_airline}}">
        </div>
        <div class="form-group">
            <label for="name_comp">ชื่อบริษัทสายการบิน</label>
            <input type="text" class="form-control" name="name_comp" id="name_comp" placeholder="name_comp" value="{{$editAirline->name_comp}}">
        </div>

       

    <h2>Current Logo</h2>
    <div>
        <img src="{{asset('storage')}}/airline_image/{{$editAirline->image}}" alt="" width="150px" height="150px"> 
    </div>

        <div class="form-group">
            <label for="image">เลือก File ภาพ</label>
            <input type="file" class="form-control"  name="image_name" id="image">
        </div>

        <button type="submit" name="submit" class="btn btn-success">Submit</button>
    </form>
</div>
Step 6 - ให้กลับไปที่ resources\views\showAirline.blade.php , แล้วทำการเพิ่มปุ่มแก้ไขลงไป , โดยมีการส่งค่า id ไปทำงานที่ Route ด้วย , ให้โดยไปวิ่งไปทำงานที่ Controll_show_ariline.php , แล้วไปทำงานที่ Function edit()

ตัวอย่าง Code ปุ่มแก้ไข :

โค้ด: เลือกทั้งหมด

<td>
  <a href="/editAirline/{{$airlines->id}}" class="btn btn-primary">แก้ไข</a>   
 </td>
Step 7 - จากนั้นก็ให้ลองทำการกดปุ่มแก้ไขดู
125.JPG
125.JPG (13.89 KiB) Viewed 4567 times
Step 8 - จะเห็นว่ามีการส่งค่า id ผ่านทาง URL
126.JPG
126.JPG (11.19 KiB) Viewed 4567 times
ผลลัพธ์ที่ได้
127.JPG
127.JPG (66.58 KiB) Viewed 4567 times
วิธีการ update โดยผ่านตัว Model Laravel Framework

Step 1 - ให้เข้าไปที่ route/web.php , ให้ไปตั้งค่า Routing สำหรับ update , เพื่อบันทึกข้อมูลที่ต้องการจะแก้ไข

ตัวอย่าง Code :

โค้ด: เลือกทั้งหมด

Route::post('/updateAirline/{id}', 'Controller_show_airline@update');
Step 2 - จากนั้นให้เข้าไปที่ app\Http\Controllers\Controller_show_airline.php ที่เราได้ทำการสร้างเอาไว้


Step 3 - แล้วให้ไปที่ Function update แล้วทำการรับค่า request เข้ามาเก็บไว้ในตัวแปร , จากนั้นก็ทำการบันทึกข้อมูล ลง database
128.JPG
128.JPG (44.28 KiB) Viewed 4567 times
ตัวอย่าง Code Function update() :

โค้ด: เลือกทั้งหมด

public function update(Request $request, $id)
    {
        $request->validate([

        'name_airline' => 'required|unique:airlines', 
        'name_comp' => 'required',
        'image_name' => 'required|file|image|mimes:jpeg,png,jpg|max:5000'
                                                            
    ]);

    //------- Update Data to Table ----------------------->
    if ($request->hasFile("image_name")) {  
         $editAirline = Airline::find($id);
         $editAirline->name_airline =  $request->name_airline;                               
         $editAirline->name_comp =  $request->name_comp;
         $editAirline->save();                    
         Session()->flash("success","Update ข้อมูลเรียบร้อยแล้ว !");
            
                                                                            //ref - https://laravel.com/docs/7.x/eloquent#updates

         //ถ้ามีการ เลือก File จาก name="image_name" ของ Form EditProductImage.php
             $editAirline = Airline::find($id);                 //ค้นหา id เพื่อตรวจสอบ ว่า File มัน ตรงกัน หรือ ซ้ำกันไหม ?
             $exists = Storage::disk('local')->exists("public/airline_image/".$editAirline->image); //ทำการตรวจสอบใน disk ว่า มี File อยู่ใน disk ตรงกันกับ  file ที่เราเลือก ....
                                                                                                    //... จาก image_name ไหม ? , ส่วน image มาจาก ชื่อ Fields ของฐานข้อมูล

             if ($exists) {                                                                         //ใช้ if ตรวจสอบว่า ถ้าตำแหน่ง File ภาพ มันตรงกันไหม ?
                 Storage::delete("public/airline_image/".$editAirline->image);                      //ให้ทำการลบภาพตัวเก่าออก แต่ชื่อ File ยังเหมือนเดิม
             }
             $request->image_name->storeAs("public/airline_image/",$editAirline->image);            //เอาภาพใหม่ไปแทนที่ โดยรับค่ามาจาก name="image_name" จาก Form view
               
         
                                                                                                    //ref - https://laravel.com/docs/7.x/filesystem#file-uploads
            }
        return redirect('/showAirline');

    }
Step 4 - จากนั้นก็กลับไปที่หน้า resources\views\showAirline.blade.php , แล้วทำการคลิกปุ่มแก้ไขข้อมูล โดยจะมีการส่งค่า id ผ่าน Routing ไป , ล้วมีการวิ่งไปที่ Controller_show_airline.php , หลังจากนั้นก็วิ่งไปที่ Function edit() , เพื่อแสดงข้อมูลที่ต้องการแก้ไขก่อน
129.JPG
129.JPG (12.51 KiB) Viewed 4567 times
130.JPG
130.JPG (12.33 KiB) Viewed 4567 times

Step 5 - จากนั้นพอมาถึงหน้า resources\views\EditAirline.blade.php , ก็ให้ทำการเปลี่ยนแปลงข้อมูลเล็กน้อย , แล้วกดบันทึกข้อมูลลงไป , โดยจะมีการส่งค่า id ผ่าน Routing ไป , แล้วมีการวิ่งไปที่ Controller_show_airline.php , หลังจากนั้นก็วิ่งไปที่ Function update()
131.JPG
131.JPG (62.03 KiB) Viewed 4567 times
ผลลัพธ์ที่ได้
132.JPG
132.JPG (52.62 KiB) Viewed 4567 times
133.JPG
133.JPG (20.19 KiB) Viewed 4567 times
วิธีการ delete โดยผ่านตัว Model Laravel Framework


Step 1 - ให้เข้าไปที่ route/web.php , ให้ไปตั้งค่า Routing สำหรับ delete

ตัวอย่าง Code :

โค้ด: เลือกทั้งหมด

Route::get('/deleteAirline/{id}', 'Controller_show_airline@destroy');
Step 2 - จากนั้นก็กลับไปที่หน้า resources\views\showAirline.blade.php , แล้วทำการสร้างปุ่มลบข้อมูลมา , โดยจะมีการส่งค่า id ผ่าน Routing ไป , แล้วมีการวิ่งไปที่ Controller_show_airline.php , หลังจากนั้นก็วิ่งไปที่ Function destroy()
134.JPG
134.JPG (24.15 KiB) Viewed 4567 times
Step 3 - จากนั้นให้เข้าไปที่ app\Http\Controllers\Controller_show_airline.php ที่เราได้ทำการสร้างเอาไว้


Step 4 - แล้วมองหา Function destroy() , แล้วใส่คำสั่ง find() เพื่อหา id ที่ต้องการจะลบ , จากนั้นก็ใส่คำสั่ง Airline::destroy($id); เพื่อทำการลบข้อมูล ดังตัวอย่าง Code นี้

ตัวอย่าง Code Function destroy()

โค้ด: เลือกทั้งหมด

 public function destroy($id)
    {
        $airline = Airline::find($id);                          //ค้นหา id เพื่อตรวจสอบว่า File ภาพที่ต้องการจะลบ มันตรงกันไหม ?

        if ($airline->airflight_2->count()>0){

         Session()->flash("alert","ไม่สามารถลบได้ เนื่องจากมีข้อมูลอยู่ในตารางเที่ยวบิน !");
         return redirect()->back();

        
        }

        $exists = Storage::disk('local')->exists("public/airline_image/".$airline->image); //ทำการตรวจสอบใน disk ว่า มี File อยู่ใน disk ตรงกันกับ  file ที่เราเลือก ....
                                                                                                    //จาก image_name ไหม ? , ส่วน image มาจาก ชื่อ Fields ของฐานข้อมูล

             if ($exists) {                                                                         //ใช้ if ตรวจสอบว่า ถ้าตำแหน่ง File ภาพ มันตรงกันไหม ?
                 Storage::delete("public/airline_image/".$airline->image);                      //ให้ทำการลบภาพใน folder store/app/public/airline_image/ ออก
             }

        Airline::destroy($id);
        Session()->flash("success","ลบข้อมูลเรียบร้อยแล้ว !");
        return redirect('/showAirline');
         
    }
Step 5 - จากนั้นก็กลับไปที่หน้า resources\views\showAirline.blade.php , แล้วทำการกดปุ่มลบข้อมูล

ผลลัพธ์ที่ได้
135.JPG
135.JPG (29.39 KiB) Viewed 4567 times


ข้อสรุป
ในการ Insert , Edit , Delete ผ่านตัว Model นั้น , จะต้องมีการส่งค่าผ่าน Routing , โดยเฉพาะ Edit , Delete ผ่านตัว Model , ซึ่งการ Inset , Edit , Delete นั้น มีความสะดวกสบายในการึ้ใช้งานง่ายกว่า , การเขียน Code php แบบเพียวๆซะอีก , ซึ่งจะช่วยให้การทำงานในการจัดการฐานข้อมูลรวดเร็วยิ่งขึ้น , โดยหลักการทำงานมีอยู่ 3 การทำงาน ที่ขาดไม่เลย คือ Model , Controller , Views ที่เป็นตัวค่อยประสานการทำงานให้เร็วมากยิ่งขึ้น , หากต้องการศึกษาบทเรียนเพิ่มเติม Laravel Framework สามารถศึกษาได้จากบทเรียนนี้



แหล่งอ้างอิงข้อมูล
https://laravel.com/docs/8.x/eloquent#inserts
https://laravel.com/docs/8.x/eloquent#updates
https://seenual.com/laravel-5-4-การ-creating-reading-updating-and-deleting-crud-โดยใช้-controllers/
ตอบกลับโพส
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 35