iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 11
1
自我挑戰組

Laravel 實戰經驗分享系列 第 11

Laravel 實戰經驗分享 - Day11 初探 Laravel - Model 模型以及 Eloquent ORM (中)

大家補班日過得好嗎 XD?
不管今天是否是假日,鐵人賽的文章還是要繼續寫,我們就從昨天提到的地方接續下去吧!
Model 的建立大部分在昨天都已經講完了,今天我們就來講 Eloquent ORM 的常用語法。

ORM 常用語法

首先,無論你在 Route 或是 Controller 等地方使用 Model,都需要在檔案最開頭引用。

use App/Models/User

以下是幾個 ORM 使用的方法。

取得這張資料表的所有資料。

$users = User::all();

這個語法相較 SELECT * FROM database.users; 簡潔多了吧!
若要取得特定欄位的資料可以使用 PHPer 熟悉的 foreach,就可以取得欄位值了。

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

取得 id = 1 的資料,直接幫你從 primary key 來找相對應的資料,也是非常方便。

$user = User::find(1);
// 取得特定欄位資料
echo $user->name;

資料庫查詢

Laravel ORM 的方式也讓查詢更加的簡潔方便,除此之外也可以直接輸入 SQL 語法,以應付 ORM 無法做到的複雜查詢。

例如要找特定欄位的某筆資料即可用以下語法查詢。

// where('欄位','查詢')
$user = User::where('name', 'Leo')->first();
// or
$user = User::firstWhere('name', 'Leo');
// 需要錯誤處理的狀況
$user = User::where('name', 'Leo')->firstOrFail();

first() 代表的是只抓這些資料的第一筆,原因有些資料庫欄位若不是在 unique 的狀況下可能會 query 到很多筆資料,因此 first() 語法有時可以避免掉這樣的狀況,但最好的方法仍是進行更複雜的查詢,Laravel 也可以這樣做。

$user = User::where('name', 'Leo')->where('job', 'bug Engineer')->first();

有沒有,這樣就找到了一個 jobbug EngineerLeo 這個人了。

一些更複雜的查詢官方文件也都有收錄,如果你要做 orderBycountlimit 等更精細的查詢也都可以做到。

如果需要純 SQL 語法查詢,基本上它的函數名就會跟你要做的查詢動作一樣。

DB::select('select * from users where id = ?', [1]);
DB::insert('insert into users (id, name) values (?, ?)', [1, 'Leo']);
DB::update('update users set job = `bug Engineer` where name = ?', ['Leo']);
DB::delete('delete from users');

有些資料庫的操作是不需要返回任何數值,就可以使用 statement 的操作

DB::statement('drop table users');

今天寫到 Model 的操作中篇,明天來講如何 createsaveupdate Model 和 Laravel 獨有的 collection 型別。
照理說這類篇幅不需要那麼長,除了我想富奸之外,就是因為在翻官方文件的時候,發現很多覺得實用又蠻重要的觀念,因此不小心就要寫到第三篇了,那我們就明天見囉!


上一篇
Laravel 實戰經驗分享 - Day10 初探 Laravel - Model 模型以及 Eloquent ORM (上)
下一篇
Laravel 實戰經驗分享 - Day12 初探 Laravel - Model 模型以及 Eloquent ORM (下)
系列文
Laravel 實戰經驗分享30

尚未有邦友留言

立即登入留言