iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 19
0
Modern Web

讓PHP再次偉大,使用Laravel系列 第 19

Laravel Eloquent ORM-(上)

  • 分享至 

  • xImage
  •  

接下來我們介紹 Laravel 的 ORM:Eloquent,ORM 就是使用物件導向的方式去操作資料庫。這對負責程式開發的工程師有一個很不錯的好處:不用處理「純 SQL 語法」,當然,不使用「純 SQL」的效能會略比使用 Eloquent 還要差一點,然而,這是可以讓我們有比較易讀的程式碼以及較好的維護性。

簡單來說Eloquent他就是 Laravel 內部的類別。其實我們繼承他就可以讓我們做使用了,例如之前練習的 Article.php

use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
    //
}

為了接下來我們可以來做一些介紹 Elquent 的部分,我這裡介紹一個之前沒講過指令,但在我們 Debug\開發的時候非常好用,那就是

$ php artisan tinker

https://ithelp.ithome.com.tw/upload/images/20191004/20106999DfcndxmpZt.png

然後你可以利用 Cli 的模式去查詢這個 Model,例如查詢所有 Article
https://ithelp.ithome.com.tw/upload/images/20191004/20106999WMACJ9zJvE.png

框架的好處就是約定成俗,因此當你這樣的宣告Article.php的 Model,他當然也就會對照articles,那如果今天有個情境:不是articles怎麼辦?那也很簡單,在 Eloquent 裡面加入一個新屬性

protected $table = 'my_articles';

這樣我們也可以使用其他 table 處理 ORM 囉!

而他另外還有一個很常用的屬性,就是是否讓我們批次賦值的部分,這個批次賦值可以讓我們不用每一次都要new一個 Model,然後一個一個屬性宣告,最後save()(請複習我們之前綜合應用(4) 使用 Laravel 做一個簡單的部落格:複習-下
)

//沒有使用批次賦值
$article = new Article();
$article->title = $title;
$article->content = $content;
$article->save();

但是如果我們要使用批次賦值之後,這就方便許多了,首先在eloquent model同樣增加一種屬性

protected $fillable = ['title','content'];

之後我們 ArticleController 就可以這樣改囉~

//使用批次賦值
$article = Article::create($request->all())

這樣是否方便許多了呢?

現在,讓我們感受一下 ORM 的魔力一下,假設我今天想要找出標題為'title'的資料該怎麼處理?在 Laravel 的 Eloquent ORM 裡,非常簡單

Article::where('title','title')->get()

https://ithelp.ithome.com.tw/upload/images/20191004/20106999Sg7Xj1l6qz.png

詳細的深入可以參考文件:https://laravel.com/docs/6.x/eloquent
明天將會討論 Relationship 的部分,敬請期待吧~

註:如果要離開php artisan tinker的可以使用exit就可以離開囉
https://ithelp.ithome.com.tw/upload/images/20191004/201069996b4GeGn4cm.png

要看完整程式碼的可以參考這裡(今天的程式碼超少的啦 XD):https://github.com/r567tw/Make-PHP-Great-Again/commit/e7041c983f0fd019ef8aa2bff5672e58f2c93588


上一篇
Laravel Error and Logging
下一篇
Laravel Eloquent ORM-(下)
系列文
讓PHP再次偉大,使用Laravel30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言