Laravel MongoDB CRUD

更新於 發佈於 閱讀時間約 4 分鐘

假設資料如下:

  • local DB裡面的test Collection
raw-image

SELECT

SELECT可以這樣寫:

DB::connection('mongodb')->collection('test')->get();
  • 由於config/database.php中設定的default DB_CONNECTION是mysql,所以這邊特別指定使用mongodb connection。

回傳結果如下:

ge

ge


事實上,上述的SELECT也可以改成用Model的方式去寫:

raw-image
<?php

namespace App\Models;
use Jenssegers\Mongodb\Eloquent\Model;

class Test extends Model
{
  protected $connection = 'mongodb';
  protected $collection = 'test';
}

SELECT直接這樣用,結果跟上述回傳是一樣的:

use App\Models\Test;
Test::get();

INSERT

用法跟insert mysql一樣,由於沒有disabled timestamp,也會順便塞updated_at, created_at欄位。

$test = new Test;
$test->name = 'ABC';
$test->nickname = 'Vic';
$test->save();
raw-image

在Model將$timestamps disabled,則不會塞updated_at, created_at欄位。

raw-image
raw-image

另一種方式,可以用create method:

  • $guarded = [] 設定所有欄位fillable。
raw-image
 Test::create([
  'name' => 'ABC',
  'nickname' => 'Vic'
]);

UPDATE

比如update這筆document:

raw-image
Test::where('_id', '62aadfec8d55483add05ff95')
->update([
  'name' => 'DEF',
  'email' => 'abc123@gmail.com'
]);

更新結果如下:

raw-image

DELETE

將這筆document刪除:

raw-image
Test::where('_id', '62aadfec8d55483add05ff95')->delete();
raw-image

軟刪除

raw-image
raw-image
use Jenssegers\Mongodb\Eloquent\SoftDeletes;
use SoftDeletes;


Test::where('_id', '62aadf078d55483add05ff94')->delete();
raw-image

不難發現,其實在Laravel中對MongoDB做CRUD,寫法上跟MySQL CRUD是一樣的,所以只要有使用過MySQL,有基本CRUD觀念,就能很快上手。





本筆記參考:

  1. https://kb.objectrocket.com/mongo-db/how-to-insert-mongodb-document-using-laravel-1079
  2. https://stackoverflow.com/questions/29712231/update-mongodb-with-laravel-5-jenssegers


留言
avatar-img
留言分享你的想法!
avatar-img
Vic Lin的沙龍
20會員
161內容數
Vic Lin的沙龍的其他內容
2023/08/13
父元件 傳遞方法使用@ <template>    ...    <Login @modalClose="modalClose"/> ... </template> <script setup>     const _modal = ref();     function m
2023/08/13
父元件 傳遞方法使用@ <template>    ...    <Login @modalClose="modalClose"/> ... </template> <script setup>     const _modal = ref();     function m
2023/03/25
前情提要 由於我的筆電已經用了10年,無法再戰下去了,且有預算考量,加上使用電腦幾乎都是定點,只有偶爾回家的時候會需要攜帶,因此最終選擇了迷你電腦,體積小不占空間,又方便攜帶,剛好符合我的需求。 菜單 由於這台無法裝獨顯,所以CPU的部分選擇 AMD R5 3400G(含Vega 11內
Thumbnail
2023/03/25
前情提要 由於我的筆電已經用了10年,無法再戰下去了,且有預算考量,加上使用電腦幾乎都是定點,只有偶爾回家的時候會需要攜帶,因此最終選擇了迷你電腦,體積小不占空間,又方便攜帶,剛好符合我的需求。 菜單 由於這台無法裝獨顯,所以CPU的部分選擇 AMD R5 3400G(含Vega 11內
Thumbnail
2023/03/10
Nuxt3中可使用useFetch來獲取數據,不須再引用axios,相當方便: 本筆記參考: https://juejin.cn/post/7104071421160063012 https://juejin.cn/post/7086472647575339045
2023/03/10
Nuxt3中可使用useFetch來獲取數據,不須再引用axios,相當方便: 本筆記參考: https://juejin.cn/post/7104071421160063012 https://juejin.cn/post/7086472647575339045
看更多