Trong trường hợp bạn đã theo dõi tôi khá lâu, tôi đã xuất bản bài viết cụ thể này. Thiết lập MongoDB cho Laravel trên ploi. io. Trong trường hợp bạn cần triển khai ứng dụng của mình vào sản xuất mà không gặp “rắc rối”, hãy. io có vẻ là một lựa chọn tuyệt vời. Lần này, tôi sẽ giới thiệu với các bạn về MongoDB trên Laravel
NoSQL [MongoDB] dường như không phổ biến trên Laravel, không phải vì không ai quan tâm, mà bởi vì không có nhiều người sẽ sử dụng Mongo over SQL vì SQL đã được nhúng vào Laravel và cung cấp trải nghiệm tuyệt vời cho người mới hiểu cách Laravel hoạt động với cơ sở dữ liệu
Trong trường hợp bạn không biết những nhược điểm của NoSQL so với SQL là gì, hãy quay lại bài viết đã đề cập trước đó, trong đó tôi không chỉ giải thích cách triển khai MongoDB trên phiên bản máy chủ đám mây mà còn là tất cả về cách chạy . Lần này, tôi sẽ chỉ trình bày ngắn gọn về từng vấn đề trong khi đưa ra các ví dụ và cách mọi thứ hoạt động, cách sử dụng cục bộ và cách chúng ảnh hưởng đến môi trường sản xuất
Bắt đầu từ con số 0 — bạn phải khá quen thuộc với Laravel Eloquent ORM để phiêu lưu bản thân xa hơn. Nếu bạn chưa hoàn toàn quen thuộc, luôn luôn là lúc để học. Háo hức học hỏi mọi thứ mọi lúc
Điều kiện tiên quyết & chạy cục bộ
Không có gì nhiều để làm — bạn chỉ cần chạy MongoDB trên máy của mình. Tôi thực sự khuyến khích mọi người chạy Valet hoặc Homestead trên máy cục bộ của họ vì nó dễ dàng hơn. Khi nói đến MongoDB, tôi chỉ làm việc với Homestead. Vì vậy, nếu bạn là một trong những người chiến thắng may mắn có thể làm việc với Homestead, hãy truy cập tệp
class Post extends Model
{
//
}
8 của bạn và thêm class Post extends Model
{
//
}
9 vào đó. Đây là cấu hình khá cơ bản của tôi cho Homesteadip: 192.168.10.13
memory: 4096
cpus: 2
mongodb: true
mariadb: true
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
-
map: 'C:\Laravel\homestead'
to: /home/vagrant/code
sites:
-
map: homestead.test
to: /home/vagrant/code/public
php: "7.2"
schedule: true
databases:
- homestead
name: homestead
hostname: homestead
Tôi cũng khuyến khích bạn sử dụng lệnh
use Jenssegers\Mongodb\Eloquent\Model;class Post extends Model0 thay vì sao chép cấu hình mà tôi đã nêu làm ví dụ vì đường dẫn đến thư mục của bạn sẽ được tạo tự động bởi lệnh đó. Những gì tôi đã nêu trong ví dụ này là thực tế là tôi có một
{
//
}
class Post extends Model
{
//
}
9 ở đóTất cả những gì bạn phải làm là cung cấp lại máy [hoặc chạy nó với
use Jenssegers\Mongodb\Eloquent\Model;class Post extends Model2 trong trường hợp bạn chưa bao giờ
{
//
}
use Jenssegers\Mongodb\Eloquent\Model;class Post extends Model3-sửa máy của mình]
{
//
}
chúc mừng. Bạn có máy chủ MongoDB của mình đang chạy bên trong VM. Nó có thể được truy cập bằng cách sử dụng
use Jenssegers\Mongodb\Eloquent\Model;class Post extends Model4 làm máy chủ và
{
//
}
use Jenssegers\Mongodb\Eloquent\Model;class Post extends Model5 và
{
//
}
use Jenssegers\Mongodb\Eloquent\Model;class Post extends Model6 làm người dùng và mật khẩu trong
{
//
}
use Jenssegers\Mongodb\Eloquent\Model;class Post extends Model7 của bạn
{
//
}
ORM hùng hồn cho NoSQL
Gói MongoDB của Jens Segers khá phổ biến. Có thể có nhiều gói xử lý NoSQL hơn, nhưng khi nó dựa trên cộng đồng — chúng ta phải tin tưởng nó hơn. Tôi cũng đã chạy nó trong sản xuất được một thời gian và cho đến nay, tôi chưa bao giờ gặp sự cố với nó
Việc thiết lập khá đơn giản nếu bạn đọc tài liệu — nó sẽ giúp bạn cài đặt nó thông qua Trình soạn thảo, thiết lập trình điều khiển cơ sở dữ liệu. Chúng tôi sẽ chỉ tập trung vào những điều quan trọng
Gói này cung cấp mô hình
use Jenssegers\Mongodb\Eloquent\Model;class Post extends Model8, như tài liệu nêu rõ. Nó là một mô hình Eloquent nhưng được tạo cho Mongo. Nếu bạn đã làm việc với ORM một thời gian, bạn sẽ quen với kiểu giao diện này
{
//
}
class Post extends Model
{
//
}
Trong trường hợp này, chúng tôi sẽ không mở rộng từ
use Jenssegers\Mongodb\Eloquent\Model;class Post extends Model9 nữa, mô hình cơ bản mà Laravel cung cấp cho chúng tôi
{
//
}
use Jenssegers\Mongodb\Eloquent\Model;class Post extends Model
{
//
}
SQL hoạt động với các bảng, NoSQL hoạt động với các bộ sưu tập. Thay vì biến
class Post extends Model
{
//
}
50, chúng ta sẽ có biến class Post extends Model
{
//
}
51. Ngoài ra, điều khá quan trọng cần lưu ý là không thể đặt khóa chính thông qua class Post extends Model
{
//
}
52 và không thể sử dụng class Post extends Model
{
//
}
53. Ngoài ra, bạn có thể muốn chỉ định rằng mô hình thuộc về kết nối class Post extends Model
{
//
}
54 mà bạn đã tạo trước đóclass Post extends Model
{
//
}
5Bạn phải yên tâm với thực tế là MongoDB tự động gán khóa chính cho tài liệu [tương đương với các hàng từ SQL]. Vì vậy, để truy cập khóa chính của tài liệu, bạn chỉ cần sử dụng tên thuộc tính giống như trong mô hình cơ bản
ip: 192.168.10.13
memory: 4096
cpus: 2
mongodb: true
mariadb: true
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
-
map: 'C:\Laravel\homestead'
to: /home/vagrant/code
sites:
-
map: homestead.test
to: /home/vagrant/code/public
php: "7.2"
schedule: true
databases:
- homestead
name: homestead
hostname: homestead
1Sử dụng
class Post extends Model
{
//
}
55 sử dụng trường khóa chính để lấy kết quảip: 192.168.10.13
memory: 4096
cpus: 2
mongodb: true
mariadb: true
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
-
map: 'C:\Laravel\homestead'
to: /home/vagrant/code
sites:
-
map: homestead.test
to: /home/vagrant/code/public
php: "7.2"
schedule: true
databases:
- homestead
name: homestead
hostname: homestead
3Hầu như không có lược đồ nào để xác địnhTrong NoSQL, chúng tôi không có lược đồ để xác định. Chúng ta có thể phát điên như chúng ta muốn. Nhưng chúng ta có thể tận dụng lợi thế của việc di chuyển để xác định các chỉ mục, các trường duy nhất và các trường cụ thể khác của mongo
ip: 192.168.10.13
memory: 4096
cpus: 2
mongodb: true
mariadb: true
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
-
map: 'C:\Laravel\homestead'
to: /home/vagrant/code
sites:
-
map: homestead.test
to: /home/vagrant/code/public
php: "7.2"
schedule: true
databases:
- homestead
name: homestead
hostname: homestead
4Quá trình di chuyển là như nhau. Để có thể chạy di chuyển, hãy đảm bảo rằng bộ trình điều khiển mặc định [biến env
class Post extends Model
{
//
}
56] được đặt thành class Post extends Model
{
//
}
54ip: 192.168.10.13
memory: 4096
cpus: 2
mongodb: true
mariadb: true
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
-
map: 'C:\Laravel\homestead'
to: /home/vagrant/code
sites:
-
map: homestead.test
to: /home/vagrant/code/public
php: "7.2"
schedule: true
databases:
- homestead
name: homestead
hostname: homestead
7Trong trường hợp bạn muốn chạy cả SQL và NoSQL trong cùng một dự án, tôi có thể cho bạn một số gợi ý
- di chuyển các lần di chuyển SQL của bạn vào một thư mục bên trong thư mục
class Post extends Model
58. Tôi sẽ gọi nó là
{
//
}class Post extends Model
59
{
//
} - tất cả các mô hình hoạt động với trình điều khiển cơ sở dữ liệu mặc định khác sẽ mở rộng mô hình phù hợp
Chạy di chuyển nên được thực hiện theo cả hai cách, đó là cục bộ hoặc trong sản xuất
Đối với trình điều khiển mặc định [tôi. e. khi
class Post extends Model
{
//
}
56 được đặt thành class Post extends Model
{
//
}
54]ip: 192.168.10.13
memory: 4096
cpus: 2
mongodb: true
mariadb: true
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
-
map: 'C:\Laravel\homestead'
to: /home/vagrant/code
sites:
-
map: homestead.test
to: /home/vagrant/code/public
php: "7.2"
schedule: true
databases:
- homestead
name: homestead
hostname: homestead
7Đối với người lái xe khác [tôi. e. cho MySQL]
use Jenssegers\Mongodb\Eloquent\Model;class Post extends Model3Xác thực người dùng với MongoDB
{
//
}
Một vấn đề lớn mà tôi gặp phải với MongoDB là khi nói về
ip: 192.168.10.13
memory: 4096
cpus: 2
mongodb: true
mariadb: true
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
-
map: 'C:\Laravel\homestead'
to: /home/vagrant/code
sites:
-
map: homestead.test
to: /home/vagrant/code/public
php: "7.2"
schedule: true
databases:
- homestead
name: homestead
hostname: homestead
12. Mô hình ip: 192.168.10.13
memory: 4096
cpus: 2
mongodb: true
mariadb: true
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
-
map: 'C:\Laravel\homestead'
to: /home/vagrant/code
sites:
-
map: homestead.test
to: /home/vagrant/code/public
php: "7.2"
schedule: true
databases:
- homestead
name: homestead
hostname: homestead
12 mở rộng mô hình ip: 192.168.10.13
memory: 4096
cpus: 2
mongodb: true
mariadb: true
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
-
map: 'C:\Laravel\homestead'
to: /home/vagrant/code
sites:
-
map: homestead.test
to: /home/vagrant/code/public
php: "7.2"
schedule: true
databases:
- homestead
name: homestead
hostname: homestead
14. MongoDB không hỗ trợ mô hình mặc định mà Laravel cung cấp, vì vậy chúng tôi sẽ phải sử dụng mô hình đi kèm với góiclass Post extends Model
{
//
}
0Trong trường hợp bạn muốn sử dụng Laravel Passport với MongoDB, hãy đảm bảo bạn sử dụng designmynight/laravel-mongodb-passport. Nó sẽ cung cấp cho bạn một lớp
ip: 192.168.10.13
memory: 4096
cpus: 2
mongodb: true
mariadb: true
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
-
map: 'C:\Laravel\homestead'
to: /home/vagrant/code
sites:
-
map: homestead.test
to: /home/vagrant/code/public
php: "7.2"
schedule: true
databases:
- homestead
name: homestead
hostname: homestead
14 khác sẽ thực hiện công việc cho bạnNoSQL = Không tham giaNoSQL tốt vì một số lý do hơn SQL. tính linh hoạt, tốc độ, khả năng mở rộng và tính toàn vẹn. Một nhược điểm của câu chuyện thăng trầm là chúng tôi không có người tham gia. Chúng tôi không thể sử dụng bộ sưu tập thứ ba để nối dữ liệu giữa hai bộ sưu tập khác. Tuy nhiên, gói có một số thẻ ẩn dưới tay áo
Ví dụ, một mối quan hệ
ip: 192.168.10.13
memory: 4096
cpus: 2
mongodb: true
mariadb: true
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
-
map: 'C:\Laravel\homestead'
to: /home/vagrant/code
sites:
-
map: homestead.test
to: /home/vagrant/code/public
php: "7.2"
schedule: true
databases:
- homestead
name: homestead
hostname: homestead
16 sẽ như thế nàyclass Post extends Model
{
//
}
1Dù bạn đang cố truy cập
ip: 192.168.10.13
memory: 4096
cpus: 2
mongodb: true
mariadb: true
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
-
map: 'C:\Laravel\homestead'
to: /home/vagrant/code
sites:
-
map: homestead.test
to: /home/vagrant/code/public
php: "7.2"
schedule: true
databases:
- homestead
name: homestead
hostname: homestead
17 hoặc ip: 192.168.10.13
memory: 4096
cpus: 2
mongodb: true
mariadb: true
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
-
map: 'C:\Laravel\homestead'
to: /home/vagrant/code
sites:
-
map: homestead.test
to: /home/vagrant/code/public
php: "7.2"
schedule: true
databases:
- homestead
name: homestead
hostname: homestead
18, bạn sẽ cần một bảng thứ ba có tên là ip: 192.168.10.13
memory: 4096
cpus: 2
mongodb: true
mariadb: true
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
-
map: 'C:\Laravel\homestead'
to: /home/vagrant/code
sites:
-
map: homestead.test
to: /home/vagrant/code/public
php: "7.2"
schedule: true
databases:
- homestead
name: homestead
hostname: homestead
19 lưu trữ dữ liệuTrong trường hợp này, MongoDB làm điều gì đó khó chịu. nó cho phép bạn nhiều-nhiều, nhưng không cần bảng thứ ba — đơn giản là nó sẽ lưu các id trong mô hình của nhau. Đảm bảo rằng nếu bạn muốn đặt khóa ngoại tùy chỉnh, bạn đặt tham số thứ hai của hàm
ip: 192.168.10.13
memory: 4096
cpus: 2
mongodb: true
mariadb: true
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
-
map: 'C:\Laravel\homestead'
to: /home/vagrant/code
sites:
-
map: homestead.test
to: /home/vagrant/code/public
php: "7.2"
schedule: true
databases:
- homestead
name: homestead
hostname: homestead
16 thành ip: 192.168.10.13
memory: 4096
cpus: 2
mongodb: true
mariadb: true
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
-
map: 'C:\Laravel\homestead'
to: /home/vagrant/code
sites:
-
map: homestead.test
to: /home/vagrant/code/public
php: "7.2"
schedule: true
databases:
- homestead
name: homestead
hostname: homestead
31class Post extends Model
{
//
}
2Sau khi làm điều này, bạn sẽ kết thúc với một cái gì đó như thế này
Tài liệu Người dùng trông như thế này
class Post extends Model
{
//
}
3Tài liệu Vai trò trông như thế này
class Post extends Model
{
//
}
4Đồng thời, phần còn lại của các mối quan hệ khác, ngoại trừ
ip: 192.168.10.13
memory: 4096
cpus: 2
mongodb: true
mariadb: true
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
-
map: 'C:\Laravel\homestead'
to: /home/vagrant/code
sites:
-
map: homestead.test
to: /home/vagrant/code/public
php: "7.2"
schedule: true
databases:
- homestead
name: homestead
hostname: homestead
32, hoạt động giống như trong SQLSchema là sân chơi của bạnVì vậy, miễn là NoSQL không có lược đồ, chúng ta có thể định nghĩa nó trong khi làm việc với dữ liệu, phải không?
Đây là tài liệu người dùng của chúng tôi
class Post extends Model
{
//
}
5Vì vậy, nếu chúng ta muốn loại bỏ một số trường, chúng ta có thể thực hiện bằng cách sử dụng phương pháp
ip: 192.168.10.13
memory: 4096
cpus: 2
mongodb: true
mariadb: true
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
-
map: 'C:\Laravel\homestead'
to: /home/vagrant/code
sites:
-
map: homestead.test
to: /home/vagrant/code/public
php: "7.2"
schedule: true
databases:
- homestead
name: homestead
hostname: homestead
33class Post extends Model
{
//
}
6Cuối cùng, nó sẽ chỉ xóa trường khỏi tài liệu của chúng tôi
class Post extends Model
{
//
}
7Đưa nó vào sản xuấtVì vậy, trong một thời gian dài, tôi đã chạy MongoDB trong sản xuất. Sự thật là với cách sử dụng cơ bản của ORM với MongoDB cấu hình nhỏ như tôi đã mô tả trong Cài đặt MongoDB cho Laravel trên ploi. io, nó chỉ hoạt động mà không có vấn đề gì. Ngay cả đối với các ứng dụng có lưu lượng truy cập cao, MongoDB vẫn nhanh và đáng tin cậy. Trung bình, nó tiêu thụ khoảng 4 GB RAM với khoảng 600 triệu lần đọc, ghi và xóa tài liệu trong cả tháng, với trung bình 600 lần ghi và đọc kết hợp mỗi giây. Điều tôi không khuyến nghị là sử dụng nó để lưu vào bộ nhớ đệm — bất cứ khi nào bạn muốn lưu vào bộ đệm, chỉ cần nhớ sử dụng bộ nhớ trên đĩa — nó cung cấp ít ma sát hơn và tốc độ truy cập và ghi nhanh hơn
💸 Tài trợXin chào, tôi là Alex, người sáng lập Renoki Co. Tôi cảm ơn bạn đã dành thời gian để đọc bài viết này và tôi hy vọng rằng nó đã giúp ích cho bạn. Việc phát triển và duy trì các gói cũng như cung cấp các bài viết hay về Laravel, Kubernetes và AWS mất rất nhiều thời gian, nhưng tôi tin rằng đó là khoảng thời gian đáng để sử dụng
Nếu bạn ủng hộ bài viết hữu ích hơn, hoặc bạn đang sử dụng một hoặc nhiều Renoki Co. gói mã nguồn mở trong các ứng dụng sản xuất của bạn, trong các bản demo thuyết trình, dự án sở thích, dự án trường học, v.v., hãy tài trợ cho công việc của chúng tôi với Nhà tài trợ Github. 📦
👋 Tham gia FAUN ngay hôm nay và nhận những câu chuyện tương tự mỗi tuần trong hộp thư đến của bạn. ️ Nhận các câu chuyện, tin tức và hướng dẫn về công nghệ phải đọc hàng tuần của bạn
Theo dõi chúng tôi trên Twitter 🐦 và Facebook 👥 và Instagram 📷 và tham gia các Nhóm Facebook và Linkedin của chúng tôi 💬