iT邦幫忙

2024 iThome 鐵人賽

DAY 11
0
自我挑戰組

PHP框架-Laravel自學挑戰系列 第 11

DAY11 - 與Laravel框架的Eloquent ORM初認識!

  • 分享至 

  • xImage
  •  

哈囉大家好~
今天要進入資料庫的部分了!
Laravel框架的其中一個特色就是讓開發者不用撰寫純SQL語法的條件下,使用物件導向(OOP)的方式來操作資料庫裡面的數據。
透過這樣的方式可以降低撰寫錯誤語法的機率,也提高了程式碼的易讀性和維護容易度。

在正式開始撰寫程式碼前,先來簡單認識一下ORM(Object Relational Mapping)-物件關聯對映。通常ORM會用在撰寫物件導向架構的程式碼中,將物件映射到資料庫的表。
在Laravel框架中,會透過Eloquent ORM來操作資料庫的表格和數據,通常會為一個資料表建立對應的模型Model。

假設這個資料表students用來存放每個學生的基本資料。
首先先來試著建立一個資料表的Model:(app/Models/Student.php)

<?php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Student extends Model
{
    protected $table = 'students'; #這裡指定資料表的名稱 students
    
    #這裡指定可以賦值的attribute
    protected $filled = ['name', 'age', 'hobby']; 

}

現在我想要在學生資料表裡面新增一筆新的紀錄,我可以將邏輯寫在controller中:
(假設這裡將post request傳遞的數據傳到addNewStudent() function)

<?php
namespace App\Http\Controllers;

use App\Models\Student;
use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;

class StudentController extends Controller
{
    public function addNewStudent(Request $request): RedirectResponse
    {
        $student = new Student; #剛剛建立的資料表Model,透過和Model互動操作資料庫
        
        $student->name = $request->name; #賦值給name attribute
        $student->age = $request->age; #賦值給age attribute
        $student->hobby = $request->hobby; #賦值給hobby attribute
        
        $student->save();
        
        return redirect('/students'); #數據新增完成,回到該路徑
    }
}

除了上面的寫法之外,也可以把創建Model instance和賦值給attribute的部分合在一起寫:

use App\Models\Student;

        $student = Student::create([
            'name' => 'Peter Parker',
            'age'  => 18,
            'hobby' => 'wall climbing'
        ]);

撰寫程式碼的過程不需要寫純SQL語句,透過直觀的方式,可以對資料庫所進行的操作一目瞭然!


今天大致瞭解了所謂「透過Model與資料庫互動」的概念,明天想要試著實際對資料庫做增刪查改。透過實際操作順便來驗證程式碼有沒有寫錯XD
那就明天見啦/images/emoticon/emoticon33.gif


上一篇
DAY10-利用Controller發送API請求-POST REQUEST
下一篇
DAY 12 - 認識Laravel框架中的migration:資料庫結構管理
系列文
PHP框架-Laravel自學挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言