composer require mongodb/mongodb
Hoặc tải tại địa chỉ
https://github.com/mongodb/mongo-php-library
Để PHP Library for MongoDB vào thưc mục common/vender
Mở file index.php hoặc bootstrap_web.php(đối với ứng dụng multi modules) thêm đoạn code
require APP_PATH . '/common/vendor/autoload.php';
Hàm kết nối csdl mongo trong file services.php
/* * new MongoDB\Client và new Client() là tương đương nhau * new MongoDB\Client nằm trong library mongo for php 7. * new Client nằm trong incubator * Nội dụng 2 Client này tương đương nhau */ $di->set('mongo', function () use ($di) { // $config = $di->get('config')->mongodb; $client = new MongoDB\Client('mongodb://' . $this->getShared('config')->database->host . ':' . $this->getShared('config')->database->port); return $client->selectDatabase($this->getShared('config')->database->dbname);}, true);//MongoDB Database/*$di->setShared('mongo',function(){ $mongo = new Client(); return $mongo->selectDatabase($this->getShared('config')->database->dbname); });*/
Giả sử ta có class Places chứa thuộc tính Location, Location là 1 class có chứa 2 thuộc tính lat và lng như sau
Class Location
class Location{ public $lat; public $lng;
}
Class Place
class Place extends MongoCollection{ public $name; //private $description; public $location;
}
Phương thức xử lí tạo mới và update thông tin Place là saveAction() có code như sau
$location = new Location(); $place->name = $this->request->getPost('name',['striptags','trim']);
$place->address = $this->request->getPost('address',['striptags','trim']);
$place->city_id = $this->request->getPost('city_id',['striptags','trim']);
$location->lat = $this->request->getPost('lat',['striptags', 'trim']);
$location->lng = $this->request->getPost('lng',['striptags', 'trim']); $place->location = $location;
if(isset($_id)){ // Xử lí update khi biến $_id đã có giá trị /* Khi sử dụng new PlaceForm($place) thì nó sẽ tự động gán thêm2 thuộc tính lat và lng vào place nếu ko unset hoặc dùng $this->mongo->Places->updateOne thì trong documanet place sẽ thêm2 trường lat và lng $this->mongo->Places->updateOne( ["_id" => new ObjectID($_id)], ['$set' =>[ 'name' => $place->name, 'address' => $place->address, 'city_id' => $place->city_id, 'location' => $location, 'photos' => $place->photos, ] ] );*/ unset($place->lat); unset($place->lng); }$place->save();
Nếu ko dùng cách trên thì khi update Place sẽ có thêm 2 filed lat và lng trong document của Collection Place