Laravel 配置使用 MongoDB 資料庫

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

為了做登入log紀錄,練習mongoDB來存放log資料,這邊就來紀錄 Laravel 配置mongoDB的實作,而原本我的side project是練習搭建docker開發環境,故這邊會以dockerfile來設定跟紀錄踩坑問題。

關於MongoDB?

MongoDB是一個開源的NoSQL(非關聯型)數據庫管理系統,通常縮寫為Mongo。它以橫向擴展能力、靈活的數據模型和高性能而聞名,特別適合處理大量的非結構化或半結構化數據,基本的MongoDB特點,可以透過ChatGPT解釋幫助理解。

總體來說,MongoDB是一個多用途、高性能的數據庫系統,特別適合處理大量的非結構化或半結構化數據,並且在Web應用程序、移動應用程序、物聯網和大數據等領域中廣泛應用。它的簡單語法和靈活性使開發人員能夠迅速開發應用程序,而且它可以根據應用程序的需求輕松擴展。

設定Mongo

接下來要來配置Mongo,這邊會使用官方建議套件mongodb/laravel-mongodb來實作,而在安裝前根據說明文件,需要先安裝 MongoDB PHP 擴展的支持,如果是使用docker容器的話,就要額外編寫dockerfile增加安裝 MongoDB PHP 擴展及mongoDB image,並在config/database.php增加mongo設定檔。

首先先修正docker-compose.yml,增加mongo的設定

raw-image

接著根據說明文件規定,安裝 MongoDB PHP 擴展的支持,編寫dockerfile

//安裝 MongoDB PHP 擴展
RUN pecl install mongodb
RUN docker-php-ext-enable mongodb

接著測試連接mongo容器,確認mongo有設定成功。

​docker exec -it {your_container_name} bash

接著進到mongo shell 新增DB跟insert一筆資料看看結果,而當你mongo版本太高,輸入 mongo會遇到以下狀況,這邊可以參考這篇文章解決方案以mongosh進入,如果要查看image版本,可以輸入下列指令。

raw-image
// 查看image 版本
docker images mongo
// 進入mongo shell​ with db 帳號密碼
mongosh --host localhost:27017 -u {your_account} -p

正確進入後會看到這個畫面,接著我們可以使用下列指令新增DB跟資料

raw-image
//切換db or create new db
use tests

//塞入一筆資料
db.posts.insertOne({
title: "Post Title 1",
body: "Body of post.",
category: "News",
likes: 1,
tags: ["news", "events"],
date: Date()
})
raw-image

確認mongo GUI工具,有正常看到此筆新增資料

raw-image

設置 Laravel

這邊使用mongodb/laravel-mongodb 套件安裝,並配置相關Laravel設定,先執行composer 安裝指令。

composer require mongodb/laravel-mongodb

安裝完畢且確定容器mongo都能正常執行資料,接下來要開始設定DB與Laravel專案連接,首先先配置database.php及環境變數.env的設定。

MONGO_HOST=app_mongodb
MONGO_DATABASE=demo
MONGO_USERNAME=test
MONGO_PASSWORD=password
raw-image

創建Mongo migration table,創建完畢後需要使用mongodb/laravel-mongodb套件功能來幫助我們新增table欄位,且透過createAt設定ttl索引。

註:根據 MongoDB 6.3 開始,MongoDB 可以使用TTL 索引,它在一段時間後或在特定時鐘時間自動從集合中刪除文件,詳細可查看相關文檔

php artisan make:migration create_collection_log_record
raw-image

這時候創建完執行migrate會出現以下問題

The SCRAM_SHA_256 authentication mechanism requires libmongoc built with ENABLE_SSL

這問題主要是建置時未完整安裝 SSL 函式庫(例如libssl-dev),這邊可以透過以下指令來查看擴展

php -i | grep -i mongo

這是缺乏擴展

root@8dbdb24198c7:/var/www/html# php -i | grep -i mongo
/usr/local/etc/php/conf.d/docker-php-ext-mongodb.ini,
mongodb
MongoDB support => enabled
MongoDB extension version => 1.16.2
MongoDB extension stability => stable
libmongoc bundled version => 1.24.3
libmongoc SSL => disabled
libmongoc crypto => disabled
libmongoc SASL => disabled
libmongoc ICU => disabled
libmongoc compression => enabled
libmongoc compression snappy => disabled
libmongoc compression zlib => enabled
libmongoc compression zstd => disabled
libmongocrypt => disabled
mongodb.debug => no value => no value

這是補全libssl-dev擴展

root@104e5e4e238e:/var/www/html# php -i | grep -i mongo
/usr/local/etc/php/conf.d/docker-php-ext-mongodb.ini,
mongodb
MongoDB support => enabled
MongoDB extension version => 1.16.2
MongoDB extension stability => stable
libmongoc bundled version => 1.24.3
libmongoc SSL => enabled
libmongoc SSL library => OpenSSL
libmongoc crypto => enabled
libmongoc crypto library => libcrypto
libmongoc crypto system profile => disabled
libmongoc SASL => disabled
libmongoc ICU => disabled
libmongoc compression => enabled
libmongoc compression snappy => disabled
libmongoc compression zlib => enabled
libmongoc compression zstd => disabled
libmongocrypt bundled version => 1.8.1
libmongocrypt crypto => enabled
libmongocrypt crypto library => libcrypto
mongodb.debug => no value => no value

接著我們要在dockerfile增加額外擴展,以便可以順利創建migrate,增加以下條件後,需要重新build docker

RUN apt-get install -y libmongoc-1.0-0 libssl-dev

執行migrate,確定laravel對於資料庫連接都正常執行了

raw-image
raw-image

實作邏輯

接著要來設定Model 並且撰寫登入log紀錄的儲存,確認執行正常,創建Model並配置相關設定,正常是編寫一個專門用來記錄logger的Service,但這邊求快,先寫在登入邏輯裡

php artisan make:model LogRecord
raw-image

在登入功能裡增加log紀錄,接著測試操作執行確認資料有正常寫入mongoDB

raw-image
raw-image

以上是整個配置流程及踩到的坑,比較麻煩的部分大概就是php版本對應的mongo版本的擴展比較容易有衝突,最後附上查詢相關文件連結。


Set Up to Run PHP with MongoDB

https://stackoverflow.com/questions/58680158/install-mongodb-driver-in-docker-with-dockerfile

mongodb.installation.pecl.php

https://github.com/doctrine/DoctrineMongoDBBundle/issues/450

https://github.com/docker-library/php/issues/374

https://stackoverflow.com/questions/49894623/why-docker-php-ext-install-does-not-contains-some-extensions-and-has-it-advanta



留言
avatar-img
留言分享你的想法!
avatar-img
DDDDD的沙龍
15會員
37內容數
學涯無止境,透過每日or每週模仿學習筆記,不管是哪些領域也好,總有一天也可以從菜雞變小雞
DDDDD的沙龍的其他內容
2023/12/13
待業中後,發現時間變很多就開始東看看西看看,思考著要如何更深入理解Laravel框架的運用,而在Laravel框架中哪些部分是框架替我們做了哪些處理,推薦一個影片給大家一起學習理解。
Thumbnail
2023/12/13
待業中後,發現時間變很多就開始東看看西看看,思考著要如何更深入理解Laravel框架的運用,而在Laravel框架中哪些部分是框架替我們做了哪些處理,推薦一個影片給大家一起學習理解。
Thumbnail
2023/12/09
現在AI工具太多,且框架對於資安支援及處理也越來越方便,反而開始會容易忽略最底層的知識,這邊回顧MySQL的鎖,順便記錄一下找到的一些影片資源,並整理筆記
Thumbnail
2023/12/09
現在AI工具太多,且框架對於資安支援及處理也越來越方便,反而開始會容易忽略最底層的知識,這邊回顧MySQL的鎖,順便記錄一下找到的一些影片資源,並整理筆記
Thumbnail
2023/12/05
這邊主要是遇到功能需要處理時區,雖然主管給的筆記已經寫得很完美了,但覺得還是得理解吸收後並記錄自己的筆記後,好像才能有效吸收到腦袋裡
Thumbnail
2023/12/05
這邊主要是遇到功能需要處理時區,雖然主管給的筆記已經寫得很完美了,但覺得還是得理解吸收後並記錄自己的筆記後,好像才能有效吸收到腦袋裡
Thumbnail
看更多
你可能也想看
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
本篇文章將教你如何在Kubernetes cluster內部署一個MongoDB,包括取得Manifests、建立Volume、部署實務、基本操作和結論。透過操作演示,讓你瞭解在實務上如何成功建立MongoDB,並進行基本操作。
Thumbnail
本篇文章將教你如何在Kubernetes cluster內部署一個MongoDB,包括取得Manifests、建立Volume、部署實務、基本操作和結論。透過操作演示,讓你瞭解在實務上如何成功建立MongoDB,並進行基本操作。
Thumbnail
詳細解說如何在 Mac 上透過 Docker 安裝 MongoDB 社群版。包括 MongoDB Compass 的安裝與配置,以及 MongoDB Shell 的使用方法,為開發者提供 MongoDB 學習資源。
Thumbnail
詳細解說如何在 Mac 上透過 Docker 安裝 MongoDB 社群版。包括 MongoDB Compass 的安裝與配置,以及 MongoDB Shell 的使用方法,為開發者提供 MongoDB 學習資源。
Thumbnail
為了做登入log紀錄,練習mongoDB來存放log資料,這邊就來紀錄 Laravel 配置mongoDB的實作,而原本我的side project是練習搭建docker開發環境,故這邊會以dockerfile來設定跟紀錄踩坑問題。
Thumbnail
為了做登入log紀錄,練習mongoDB來存放log資料,這邊就來紀錄 Laravel 配置mongoDB的實作,而原本我的side project是練習搭建docker開發環境,故這邊會以dockerfile來設定跟紀錄踩坑問題。
Thumbnail
MySQL 應用到 URL Shortener 上
Thumbnail
MySQL 應用到 URL Shortener 上
Thumbnail
Connect database 因爲我們後端是用 django,所以我們要用 python 來操作 MongoDB,MongoDB 官方推薦的 python driver 是 pymongo,首先來安裝 在想使用的檔案內加入 myclient = pymongo.MongoClient("mong
Thumbnail
Connect database 因爲我們後端是用 django,所以我們要用 python 來操作 MongoDB,MongoDB 官方推薦的 python driver 是 pymongo,首先來安裝 在想使用的檔案內加入 myclient = pymongo.MongoClient("mong
Thumbnail
上一篇有提到 MongoDB Compass,而且也已經裝好了,那就來介紹一下吧 MongoDB Compass 是官方做的圖形介面工具用來操作架好的 MongoDB service,這樣就不用什麼事情都辛苦的用 mongo shell 操作了 New connection 輸入想要連接的 Mong
Thumbnail
上一篇有提到 MongoDB Compass,而且也已經裝好了,那就來介紹一下吧 MongoDB Compass 是官方做的圖形介面工具用來操作架好的 MongoDB service,這樣就不用什麼事情都辛苦的用 mongo shell 操作了 New connection 輸入想要連接的 Mong
Thumbnail
Introduction MongoDB 應該是目前 NoSQL 陣營中最大家的資料庫,另外 Redis 也蠻多人使用,兩者主要區別是,Redis 更高效能,但是預設佔用的資源也較多 Installation 基本上就從 MongoDB 官網下載,然後解壓縮後一直點下去就好 執行安裝檔有一個 Ins
Thumbnail
Introduction MongoDB 應該是目前 NoSQL 陣營中最大家的資料庫,另外 Redis 也蠻多人使用,兩者主要區別是,Redis 更高效能,但是預設佔用的資源也較多 Installation 基本上就從 MongoDB 官網下載,然後解壓縮後一直點下去就好 執行安裝檔有一個 Ins
Thumbnail
假設資料如下: local DB裡面的test Collection SELECT SELECT可以這樣寫: 由於config/database.php中設定的default DB_CONNECTION是mysql,所以這邊特別指定使用mongodb connection。 回傳結果如下: 軟刪除
Thumbnail
假設資料如下: local DB裡面的test Collection SELECT SELECT可以這樣寫: 由於config/database.php中設定的default DB_CONNECTION是mysql,所以這邊特別指定使用mongodb connection。 回傳結果如下: 軟刪除
Thumbnail
欲在Laravel中使用MongoDB,首先要確認有安裝MongoDB PHP driver,接著再安裝Laravel MongoDB套件,才能開始使用CRUD。 1. 安裝MongoDB PHP driver (1) 到這邊下載MongoDB PHP driver (3) 檢查是否正常 後記:
Thumbnail
欲在Laravel中使用MongoDB,首先要確認有安裝MongoDB PHP driver,接著再安裝Laravel MongoDB套件,才能開始使用CRUD。 1. 安裝MongoDB PHP driver (1) 到這邊下載MongoDB PHP driver (3) 檢查是否正常 後記:
Thumbnail
MongoDB 簡介 MongoDB是一種開源的NoSQL文件資料庫(Document Database),MongoDB中可以有多個Database,每個Database中可以有多個Collection,每個Collection中可以有多個Document。 Windows 安裝 MongoDB
Thumbnail
MongoDB 簡介 MongoDB是一種開源的NoSQL文件資料庫(Document Database),MongoDB中可以有多個Database,每個Database中可以有多個Collection,每個Collection中可以有多個Document。 Windows 安裝 MongoDB
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News