Cách sử dụng MySQL và mongodb cùng nhau trong laravel

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 Homestead

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

Tôi cũng khuyến khích bạn sử dụng lệnh

use Jenssegers\Mongodb\Eloquent\Model;class Post extends Model
{
//
}
0 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 Model
{
//
}
2 trong trường hợp bạn chưa bao giờ
use Jenssegers\Mongodb\Eloquent\Model;class Post extends Model
{
//
}
3-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 Model
{
//
}
4 làm máy chủ và
use Jenssegers\Mongodb\Eloquent\Model;class Post extends Model
{
//
}
5 và
use Jenssegers\Mongodb\Eloquent\Model;class Post extends Model
{
//
}
6 làm người dùng và mật khẩu trong
use Jenssegers\Mongodb\Eloquent\Model;class Post extends Model
{
//
}
7 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 Model
{
//
}
8, 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 Model
{
//
}
9 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
{
//
}
5

Bạ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
1

Sử 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 định

Trong 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
4

Quá 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
{
//
}
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

Trong 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 Model
{
//
}
3Xá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ói

class Post extends Model
{
//
}
0

Trong 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ạn

NoSQL = Không tham gia

NoSQL 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ày

class Post extends Model
{
//
}
1

Dù 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ệu

Trong 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
31

class Post extends Model
{
//
}
2

Sau 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
{
//
}
3

Tà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 SQL

Schema là sân chơi của bạn

Vì 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
{
//
}
5

Vì 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
33

class Post extends Model
{
//
}
6

Cuố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ất

Vì 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 💬

Chúng ta có thể sử dụng MySQL và MongoDB cùng nhau không?

Tạo bảng sinh viên trong MySQL để nhận dữ liệu mới. Tải dữ liệu vào bảng MySQL bằng lệnh bên dưới. Bạn hiện đã tải dữ liệu từ MongoDB vào MySQL . Một giải pháp thay thế khác cho quy trình này là khai thác khả năng lưu trữ tài liệu của MySQL.

Chúng tôi có thể kết nối MongoDB với Laravel không?

Tôi có thể sử dụng MongoDB với Laravel không? . Yes! Trên thực tế, MongoDB là một lựa chọn tuyệt vời cho các dự án Laravel. Khi chúng ta bắt đầu phát triển Laravel bằng MongoDB, chúng ta sẽ tìm hiểu một ví dụ về cách xây dựng một ứng dụng blog.

Làm cách nào để kết nối MongoDB với Laravel 8?

Ví dụ hướng dẫn Laravel 8 MongoDB CRUD .
Bước 1. Cài đặt Laravel 8. .
Bước 2. Định cấu hình cơ sở dữ liệu MongoDB. .
Bước 3. Cài đặt gói laravel-mongodb. .
Bước 4. Thêm tuyến đường. .
Bước 5. Tạo Model và Controller. .
Bước 6. Tạo tập tin Blade

Tôi có nên học cả MongoDB và MySQL không?

MySQL là lựa chọn tuyệt vời nếu bạn có dữ liệu có cấu trúc và cần một cơ sở dữ liệu quan hệ truyền thống . MongoDB rất phù hợp để phân tích thời gian thực, quản lý nội dung, Internet vạn vật, di động và các loại ứng dụng khác.

Chủ Đề