iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 22
0
自我挑戰組

從0開始-30天摸索laravel系列 第 22

DAY22: ORM上菜囉

  • 分享至 

  • xImage
  •  

ORM(Object Relational Mapping)可以處理大多數的SQL需求,來好好研究一番CRUD(SELECT、CREATE、 UPDATE、DELETE)該怎麼使用,但在開始之前還是要先熟悉ORM的規則。

備註:不同的ORM規則不同,以下是以laravel的ORM來做說明唷!!!!

開始玩之前,我們需要使用artisan建立一個model
php artisan make:model Post

說明一下Eloquent ORM的規則,ORM會讓資料表與Medel相對應,所以可以透過Model與資料表做異動

  1. Eloquent Model 預設放在 app 目錄下
  2. Eloquent Model檔案名稱首字大寫,例如app/Post.php
  3. Eloquent Model檔案中,會自動以Model的名稱去找對應的資料表(類別名稱的小寫+複數作為名稱去尋找,Model是Post;那資料表就是posts)
  4. 如果不想使用默認的命名規則,可以特殊訂製Model的名稱去找對應的資料表的方法,如下這樣的方式去設定
    protected $table="bigposts";

備註:上面的這部分是我自己嘗試的結果,有些是說會有models資料夾~

大致語法

取得所有資料

$posts = Post::all();
foreach ($posts as $post) {
    dump($post->title);
}

Chunk

Post::chunk(10, function ($posts) {
   foreach ($posts as $post) {
       if ($post->views == 0) {
           continue;
       } else {
           dump($post->title . ':' . $post->views);
       }
   }
});

Cursor

foreach (Post::cursor() as $post) {
    dump($post->title . ':' . $post->content);
}

給點條件式
$posts = Post::where('views', '>', 0)->select('id', 'title', 'content')->get();

獲取一個
$user = User::where('name', 'jack')->first();

如果條件是主key也可以這樣玩
$user = User::find(1);
計數
$num = User::whereNotNull('email_verified_at')->count();
求和
$sum = User::whereNotNull('email_verified_at')->sum('id');
平均值
$avg = User::whereNotNull('email_verified_at')->avg('id');
最小值
$min = User::whereNotNull('email_verified_at')->min('id');
最大值
$max = User::whereNotNull('email_verified_at')->max('id');

從以上這些可以看到ORM跟原生SQL的差距,感覺是不是不用背一堆語法阿~但但但…請注意!!!這都是簡單的語法,如果是比較複雜的語法,我猜可能就比寫原生SQL還頭痛了吧!!!即便如此ORM的大多情況下,確實也是帶來了許多好處,所以接下來還需要繼續GO GO ORM!GO GO ORM!


上一篇
DAY21: 蝦米是ORM?
下一篇
DAY23: ORM續談 - OOP
系列文
從0開始-30天摸索laravel31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言