[ Laravel ] 初心者之路#09 – Database in Laravel

標籤: , , ,

前言

今天要跟各位介紹的,是在Laravel中該如何存取資料庫。

在Laravel中,可以透過原生的SQL以及Laravel提供的查詢指令,或是Eloquent ORM的方式,來存取資料。

設定

要連接上資料庫最重要的,當然就是要先做好設定,才能確保你能正確地連到資料庫。

目前 Laravel 支援四種資料庫:

  • MySQL
  • PostgreSQL
  • SQLite
  • SQL Server

 

在Laravel,資料庫的設定存放於config/database.php中

database config

 

同時你發現有些設定值並非直接給值,而是env(…),這是代表它會參考到.env的內容,也就是我們在前面討論過的環境設定檔。

 

database env

 

通常我們最常更改的參數,有以下幾個

  • DB_HOST – 連接資料庫的HOST地址
  • DB_DATABASE – 要連接的資料庫名稱
  • DB_USERNAME – 連接時使用的帳號
  • DB_PASSWORD – 連接時使用的密碼

 

使用原生的SQL語法

當設定一切就緒之後,就可以連上資料庫開始查詢

 

Select語法

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    /**
     * 顯示所有應用程式的使用者清單。
     *
     * @return Response
     */
    public function index()
    {
        $users = DB::select('select * from users where active = ?', [1]);

        return view('user.index', ['users' => $users]);
    }
}

 

foreach ($users as $user) {
    echo $user->name;
}

 

? 可以用來進行參數綁定,去接後面的參數,同時提供了SQL Injection的防護

 

另外也可以使用命名綁定的方式

$results = DB::select('select * from users where id = :id', ['id' => 1]);

 

Insert語法

DB::insert('insert into users (id, name) values (?, ?)', [1, 'Dayle']);

 

Update語法

$affected = DB::update('update users set votes = 100 where name = ?', ['John']);

 

Delete語法

$deleted = DB::delete('delete from users');

 

Eloquent ORM 簡介

ORM (Object-Relational Mapping)是指將關聯式資料庫映射至物件導向的資料抽象化技術

簡單來說,就是把資料庫中的資料變成一個物件(class),讓寫程式時可以透過操作這個物件,來存取資料庫中的資料,非常方便。

而Laravel的Eloquent ORM就提供了非常優雅、簡潔的ActiveRecord實作來和資料庫互動。

每個資料庫中的資料表,都會對應到一個Eloquent Model,當建立好對應的Model後,你就可以透過這個Model存取資料表中的資料。

 

建立Model

你可以透過命令列執行Artisan指令來自動產生Model:

php artisan make:model Product

 

make model 後面接的就是想要產生的Model Name

在Laravel中命名的習慣是:

  • 資料表使用英文複數;Model使用英文單數
  • 資料表用小寫,單字間用蛇底式命名(Snake Case);Model用首字大寫大駝峰式命名(Upper Camel Case)

產生的Model檔案,預設存放於/app中

 

Model設定

一個剛建立好的Model大概會長這樣

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    //
}

 

如果按照正確地命名習慣,其實已經可以開始透過這個Model去存去users資料表中的資料了,很神奇吧!

 

不過,我們也可以去定義這個Model對應的table

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    /**
     * 與模型關聯的資料表。
     *
     * @var string
     */
    protected $table = 'my_products';
}

 

Eloquent會假設每個資料表都會有一個主鍵叫做id,但如果你的資料表不是這樣規劃的,你也可以自行定義主鍵的欄位

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    /**
     * 自行定義資料庫中的主鍵。
     *
     * @var string
     */
    protected $primarykey = "my_id"
}

 

Eloquent會假設你的資料表中會有created_at跟updated_at欄位,如果沒有或是不想要讓Eloquent自動管理,可以進行修改

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    /**
     * 說明模型是否應該被戳記時間。
     *
     * @var bool
     */
    public $timestamps = false;
}

使用Model

當建立並設定好Model之後,我們就可以開始使用它來存取的資料

<?php

use App\Product;

$products = App\Product::all();

foreach ($products as $product) {
    echo $products->name;
}

 

加上where, order等限制

$products = App\Product::where('price', '>', '100') // 取得price>100的products
               ->orderBy('price', 'desc') // 根據price由高到低排列
               ->take(10) // 只取前10筆資料
               ->get();

 

語法簡潔易懂對吧?

 

Insert語法

建立一個model物件,給值,儲存,成功~

<?php

$product = new App\Product;

$product->name = "Latte";
$product->price = 80;

$product->save();

 

Update語法

取得要更新的物件,給值,儲存,成功~

$product = App\Product::find(1); // 取得id (primarykey) = 1的資料

$product->name = "Cappuccino";
$product->price = 90;

$product->save();

 

Delete語法

取得要刪掉的資料,刪除,成功~

$product= App\Product::find(1);

$product->delete();

 

總結

今天介紹了以下內容

  • Laravel Database簡介
  • Database設定
  • 使用原生SQL語法存取資料
  • Eloquent ORM介紹
  • 建立與設定Model
  • 使用Model存取資料

那麼今天的介紹就到這邊

See you!



相關文章

初心者之路#14– 整合實作 PART 2 前言 在上一篇,跟各位快速的實作完後台的介面,並且完成了Database中資料的新增、修改、刪除 接下來,就是要讓我們在後台的變更都可以直接影響到前台,將資料帶入到前台頁面當中~ &nb...
初心者之路#04 – 工具準備 (VS Code, Git) 所謂工欲善其事,必先利其器,初心者要練等打怪,也要先有武器裝備。今天要跟各位介紹的,是我們在開發專案時會使用到的工具,包含了文字編輯器- Visual Studio Code,以及版本控制系統- Gi...
初心者之路#11 – 透過Migration建立Datebase實作... 前言 今天將會利用上一次 初心者之路#10 – Migrations 和 Schema的內容,利用Migration帶各位建立目前專案的資料庫結構   建立Database 要透...
初心者之路#12 – Controller 控制器 前言 今天要來介紹的,是Laravel中的Controller,它做的事情就像先前提過的MVC中的Controller一樣,是用來處理網頁的要求邏輯。 在Laravel中,Controller...