MongoDB là một lựa chọn tuyệt vời cho một số ứng dụng. Trong thế giới PHP, chúng ta cũng có thể thử một thứ gì đó hơn là chỉ một ngăn xếp LAMP và cung cấp cho các lược đồ cơ sở dữ liệu của chúng ta nhiều tự do hơn. Một trong những Trình ánh xạ quan hệ đối tượng [ORM] phổ biến nhất cho PHP là Học thuyết cũng có triển khai rất tốt Ánh xạ tài liệu đối tượng [ODM] cho MongoDB. Chúng tôi sẽ không đi vào chi tiết về những ưu điểm và nhược điểm của cơ sở dữ liệu NoSql và SQL nhưng hãy xem cách chúng tôi có thể xây dựng một ứng dụng rất đơn giản nếu chúng tôi đã quyết định sử dụng Mongo
Mã nguồn hoàn chỉnh có sẵn trong kho lưu trữ sau
jkapuscik2/mongo-shopping-cart
Đóng góp cho sự phát triển của jkapuscik2/mongo-shopping-cart bằng cách tạo một tài khoản trên GitHub
github. com
Chúng tôi cần tạo một ứng dụng giỏ hàng với API REST cho phép chúng tôi
- thêm sản phẩm mới vào danh mục
- cập nhật tên sản phẩm
- tạo một giỏ hàng mới
- thêm và xóa sản phẩm khỏi giỏ hàng
- ghi lại khi một sản phẩm được thêm vào giỏ hàng
Chúng tôi cũng có một loạt các yêu cầu
- giá của sản phẩm phải dương và có đơn vị tiền tệ được chỉ định là EUR, PLN hoặc USD
- chúng tôi chỉ có thể có một sản phẩm thuộc loại nhất định trong giỏ hàng và không quá 4 sản phẩm cùng lúc
Chúng tôi sẽ sử dụng khung Symfony vì nó tích hợp độc đáo với Doctrine ODM. Chúng ta có thể cài đặt thư viện và tạo cấu hình cơ bản bằng cách chạy các lệnh sau
composer config extra.symfony.allow-contrib truecomposer require doctrine/mongodb-odm-bundle
Chúng tôi sẽ truy cập cơ sở dữ liệu theo cách tương tự như với ORM trong Doctrine. Chúng tôi đang sử dụng các chú thích trong các mô hình sẽ chỉ ra các biến lớp nào sẽ được duy trì. Trong Product
của chúng tôi, chúng tôi đang cung cấp tên, giá và đơn vị tiền tệ làm đối số hàm tạo. Không cần nhiều logic nên lớp học rất đơn giản
Theo mặc định, một bộ sưu tập có cùng tên với một mô hình sử dụng nó. Chúng tôi có thể tùy chỉnh hành vi này bằng cách cung cấp tham số collectionName
trong chú thích Document
. Chúng tôi cũng có thể lưu trữ nhiều mô hình khác nhau trong một bộ sưu tập vì MongoDb rất linh hoạt khi nói đến lược đồ cơ sở dữ liệu
Product
nhận các đối tượng giá trị đã được xác thực để thực thi tính chính xác của dữ liệu. Chúng tôi sẽ không đi vào chi tiết triển khai của những thứ đó ở đây, nó có thể được tìm thấy trên Github
Học thuyết ODM làm cho việc khóa lạc quan cực kỳ đơn giản. Cơ chế đó sẽ đảm bảo rằng không ai sửa đổi mô hình cùng lúc với chúng tôi bằng cách so sánh thuộc tính version
. Tất cả những gì chúng tôi phải làm là đặt một chú thích @ODM\Version
duy nhất
Mô hình cho giỏ hàng phức tạp hơn một chút vì chúng tôi phải đảm bảo đáp ứng tất cả các quy tắc liên quan đến việc thêm và xóa sản phẩm. Chúng tôi có thể lưu trữ tham chiếu đến bộ sưu tập Sản phẩm trong Mongo hoặc sử dụng tài liệu được nhúng. Mỗi cách tiếp cận đều có ưu và nhược điểm. Chúng tôi phải lưu trữ dấu thời gian bổ sung sản phẩm mới để tài liệu được nhúng sẽ phù hợp với chúng tôi hơn. Hơn nữa, nó sẽ hiệu quả hơn
Chúng tôi đang sử dụng dữ liệu về sản phẩm và tạo một tài liệu nhúng ShoppingCartItem
riêng biệt
Vấn đề chúng tôi có thể gặp phải là đồng bộ hóa dữ liệu giữa các bộ sưu tập. Khi ai đó thay đổi tên của một sản phẩm, nó sẽ không được tự động phổ biến và chúng tôi sẽ thấy một tên lỗi thời trong giỏ hàng. Chúng tôi sẽ phải tạo cơ chế riêng để đảm bảo tính nhất quán của dữ liệu
Chúng tôi đang duy trì các mô hình với Trình quản lý tài liệu Doctrine. Chúng tôi có thể sử dụng kho lưu trữ tùy chỉnh cho từng mô hình hoặc sử dụng kho lưu trữ tích hợp với các chức năng cơ bản. Để đơn giản, chúng tôi sẽ gắn bó với cái sau. Nếu cần tùy chỉnh nhiều hơn, chúng ta sẽ phải thêm tham số repositoryClass
vào chú thích @ODM\Document
MongoDB tỏ ra rất hữu ích trong một số trường hợp sử dụng và có thể hoạt động tốt với PHP. Nó chắc chắn là một giải pháp thay thế thú vị cho hầu hết các công cụ cơ sở dữ liệu phổ biến trong các dự án PHP như MySql hoặc PostgreSQL
Nếu bạn đang sử dụng PHP để xây dựng ứng dụng, bạn có thể muốn tương tác với cơ sở dữ liệu MongoDB trong mã của mình. May mắn thay, thật dễ dàng để kết nối với cơ sở dữ liệu MongoDB từ tập lệnh PHP chỉ với một chút thiết lập và cấu hình. Trong bài viết này, chúng tôi sẽ chỉ cho bạn cách thiết lập kết nối PHP và MongoDB để bạn có thể truy cập cơ sở dữ liệu MongoDB trong ứng dụng của mình
điều kiện tiên quyết
Trước khi thử thiết lập kết nối giữa PHP và MongoDB, cần phải có một vài điều kiện tiên quyết cần thiết
Bạn cần đảm bảo rằng XAMPP hoặc WAMP đã được cài đặt và định cấu hình trên hệ thống của mình
MongoDB phải được cài đặt và cấu hình trên máy của bạn
Bạn sẽ cần có quyền truy cập internet để tải xuống một số tệp cần thiết
Cài đặt trình điều khiển MongoDB PHP
Trong phần này, chúng tôi sẽ bắt đầu quá trình thiết lập kết nối PHP và MongoDB bằng cách cài đặt trình điều khiển MongoDB PHP trên hệ thống của chúng tôi. Để thực hiện việc này, chúng tôi chỉ cần tải xuống tệp 'DLL' [Thư viện liên kết động] cần thiết có thể tìm thấy tại liên kết này. MongoDB PHP
Chúng tôi sẽ đặt tệp đã tải xuống này vào một trong các thư mục cài đặt PHP của chúng tôi, chúng tôi sẽ thảo luận trong phần tiếp theo
Định cấu hình PHP và MongoDB trong Windows
Tiếp theo, hãy xem lại cách định cấu hình PHP theo cách cho phép kết nối với MongoDB trong môi trường Windows
- Đầu tiên, chúng tôi mở php. ini được tìm thấy trong thư mục XAMPP sau.
Product
0
Tiếp theo, chúng tôi thêm văn bản sau vào phần tiện ích mở rộng của tệp.
Product
1Cuối cùng, chúng tôi giải nén tệp 'DLL' mà chúng tôi đã tải xuống trước đó vào thư mục sau.
Product
2
Tạo cơ sở dữ liệu mẫu MongoDB
Bước tiếp theo của chúng tôi sẽ là tạo một tập dữ liệu mẫu mà chúng tôi có thể sử dụng trong hướng dẫn này
Đầu tiên, chúng tôi sẽ kết nối với cơ sở dữ liệu có tên productdb
Sau đó, chúng tôi có thể thực hiện thao tác insertMany[] để thêm một số tài liệu giả mà chúng tôi có thể sử dụng cho mục đích demo. Hoạt động sẽ tạo bộ sưu tập Product
3 và thêm các tài liệu này vào cùng một lúc
db. Mỹ phẩm. insertMany[ [
{ item. "bàn phím", số lượng. 20 },
{ item. "chuột", số lượng. 40 },
{ mục. "nguồn điện", số lượng. 30 },
{ item. "cpu", số lượng. 30 },
{ item. "card màn hình", số lượng. 20 },
{ mục. "mô-đun bộ nhớ", số lượng. 30 }
] ];
Thao tác này sẽ trả về một phản hồi giống như sau
{
"đã xác nhận". true,
"insertedIds". [
ObjectId["5e48b471389f0fd56b8b0554"],
ObjectId["5e48b471389f0fd56b8b8b0555"],
ObjectId["5e48b4715"b80f56], ObjectId["5e48b80f4715"b47156], ObjectId["5e48b80f4715"b47156], ObjectId["5e48b80f4715"b47156], ObjectId["5e48b80f4715"b47156], ObjectId["5e48b80f4715"b47156], ObjectId["5e48b80f4715"b47156], ObjectId["5e48b80f4715"b47156], ObjectId["5e48b80f4715"b47156], ObjectId["5e48b80f4715"b47156], ObjectId["5e48b80f4715"b47156], ObjectId["5e48b80f4715"b47156], ObjectId["5e48b80f4715"b47156], ObjectId["5e48b80f4715"b47156], ObjectId["5e48b80f4715"b47156], ObjectId["5e48b80f4715"b47156], ObjectId["5e48b80f4715"b47156], ObjectId["5e48b80f4715"b47156], ObjectId["5e48b80f4715"b47156], ObjectId["5e48b80f4715"b47156], ObjectId["5e48b80f4715"b47156], ObjectId["5e48b80f4715"b47156], ObjectId["5e48b80f4715"b47156], ObjectId["5e48b80f4715"b47156],
ObjectId["5e48b471389f0fd56b8b0557"],
ObjectId["5e48b471389f0fd56b8b0558"],
ObjectId["5e48b471389f0fd56b8b0559"]
]
}
Chúng tôi có thể xác minh rằng bộ sưu tập Product
3 đã được tạo thành công bằng lệnh này. Product
5
Chúng ta sẽ nhận được kết quả giống như thế này
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
"_id". ObjectId["5e48b471389f0fd56b8b0554"],
"mục". "bàn phím",
"số lượng". 20
}
{
"_id". ObjectId["5e48b471389f0fd56b8b0555"],
"mục". "chuột",
"số lượng". 40
}
{
"_id". ObjectId["5e48b471389f0fd56b8b0556"],
"mục". "nguồn điện",
"số lượng". 30
}
{
"_id". ObjectId["5e48b471389f0fd56b8b0557"],
"mục". "cpu",
"số lượng". 30
}
{
"_id". ObjectId["5e48b471389f0fd56b8b0558"],
"mục". "thẻ video",
"số lượng". 20
}
{
"_id". ObjectId["5e48b471389f0fd56b8b0559"],
"mục". "mô-đun bộ nhớ",
"số lượng". 30
}
Kết nối với cơ sở dữ liệu MongoDB
Trong phần này, chúng ta sẽ tạo một tập lệnh PHP đơn giản sẽ kết nối với cơ sở dữ liệu Product
6 của chúng ta
Hãy bắt đầu bằng cách tạo một thư mục mới có tên ‘phpmongo’ trong thư mục Product
7. Sau đó, chúng tôi có thể tạo một tệp PHP mới có tên là 'kiểm tra. php’ và thêm đoạn mã sau vào nó
$mng = new MongoDB\Driver\Manager["mongodb. //máy chủ cục bộ. 27017"];
$qry = new MongoDB\Driver\Query[[]];
$rows = $mng->executeQuery["productdb. sản phẩm", $qry];
foreach [$rows as $row] {
foreach [$rows as $row] {
echo nl2br["$row->item. $row->qty\n"];
}
}
?>
Mã hiển thị ở trên sẽ đọc dữ liệu từ bộ sưu tập 'sản phẩm' tồn tại trong cơ sở dữ liệu 'productdb'. Hãy xem xét kỹ hơn những gì đang xảy ra trong kịch bản này
Chúng tôi sử dụng
Product
8 để tạo một đối tượng truy vấn MongoDB với một mảng trống. Điều này yêu cầu MongoDB đọc tất cả dữ liệu có thể có trong bộ sưu tập đíchSau đó, chúng tôi thực hiện truy vấn đối với tên bộ sưu tập đã chỉ định bằng cách sử dụng dòng mã sau.
Product
9Cuối cùng, chúng tôi lặp lại tất cả các tài liệu phù hợp và in nó ra trên trang
Kết quả sẽ giống như sau
Phần kết luận
Khi bạn đang viết mã PHP và cần tương tác với cơ sở dữ liệu, MongoDB là một lựa chọn tự nhiên. May mắn thay, chỉ cần vài bước đơn giản để tạo kết nối giữa PHP và MongoDB. Trong bài viết này, chúng tôi đã hướng dẫn bạn toàn bộ quá trình tạo kết nối PHP và MongoDB, đồng thời chúng tôi đã cung cấp một ví dụ mã bao gồm một truy vấn MongoDB điển hình. Với các hướng dẫn và ví dụ về mã này để hướng dẫn bạn, bạn sẽ có thể viết mã PHP có thể truy vấn cơ sở dữ liệu MongoDB của riêng bạn