Может ли кто-нибудь помочь мне указывать мне учебник, библиотеку и т.д., что позволит мне работать с MongoDB от CodeIgniter?
MongoDB и CodeIgniter
Ответ 1
Я не уверен, что это "CodeIgniter way", но я создал библиотеку CodeIgniter, которая расширяет класс Mongo с дополнительным свойством для хранения текущего соединения с базой данных.
Вот соответствующие файлы кода из моего проекта.
конфигурации /mongo.php
$config['mongo_server'] = null;
$config['mongo_dbname'] = 'mydb';
библиотеки /Mongo.php
class CI_Mongo extends Mongo
{
var $db;
function CI_Mongo()
{
// Fetch CodeIgniter instance
$ci = get_instance();
// Load Mongo configuration file
$ci->load->config('mongo');
// Fetch Mongo server and database configuration
$server = $ci->config->item('mongo_server');
$dbname = $ci->config->item('mongo_dbname');
// Initialise Mongo
if ($server)
{
parent::__construct($server);
}
else
{
parent::__construct();
}
$this->db = $this->$dbname;
}
}
И пример контроллера
Контроллеры /posts.php
class Posts extends Controller
{
function Posts()
{
parent::Controller();
}
function index()
{
$posts = $this->mongo->db->posts->find();
foreach ($posts as $id => $post)
{
var_dump($id);
var_dump($post);
}
}
function create()
{
$post = array('title' => 'Test post');
$this->mongo->db->posts->insert($post);
var_dump($post);
}
}
Ответ 2
MongoDB очень хорошо поддерживается в сообществе CodeIgniter, занимайте время и погружайтесь в: p
Ответ 3
Мне нравится пример Stephen Curran, поскольку он прост и позволяет интерфейс Mongo, не слишком много функциональности, написанной в Php, я склоняюсь к тому, чтобы найти огромные абстракции в несколько раз за то, за чем я буду.
Я расширил свой пример, включив аутентификацию базы данных. Перейдите сюда: http://www.mongodb.org/display/DOCS/Security+and+Authentication, чтобы прочитать о аутентификации mongo, не забудьте включить аутентификацию для Mongo Server, к которому вы подключаетесь.
Я также изменил функцию конструктора старого стиля как __construct и обрабатываю Mongo Connection Exceptions, поскольку они могут показывать ваше имя пользователя и пароль.
конфиг /mongo.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
$config['mongo_server'] = 'localhost';
$config['mongo_dbname'] = 'my_mongo_db';
$config['mongo_username'] = 'mongo_user';
$config['mongo_password'] = 'password1234';
/* End of file mongo.php */
библиотеки /Mongo.php
<?php
class CI_Mongo extends Mongo{
protected $db;
function __construct()
{
// Fetch CodeIgniter instance
$ci = get_instance();
// Load Mongo configuration file
$ci->load->config('mongo');
// Fetch Mongo server and database configuration
$server = $ci->config->item('mongo_server');
$username = $ci->config->item('mongo_username');
$password = $ci->config->item('mongo_password');
$dbname = $ci->config->item('mongo_dbname');
// Initialise Mongo - Authentication required
try{
parent::__construct("mongodb://$username:[email protected]$server/$dbname");
$this->db = $this->$dbname;
}catch(MongoConnectionException $e){
//Don't show Mongo Exceptions as they can contain authentication info
$_error =& load_class('Exceptions', 'core');
exit($_error->show_error('MongoDB Connection Error', 'A MongoDB error occured while trying to connect to the database!', 'error_db'));
}catch(Exception $e){
$_error =& load_class('Exceptions', 'core');
exit($_error->show_error('MongoDB Error',$e->getMessage(), 'error_db'));
}
}
}
Ответ 4
Работа с MongoDB в CodeIgniter не будет отличаться от работы с ним где-нибудь еще.
Вы можете сбивать библиотеку MongoDB, которая будет соединяться в конструкторе и хранить $this- > conn, который будет использоваться позже в методах.
то либо работайте напрямую с свойством conn в ваших контроллерах, либо создайте несколько методов в своей библиотеке MongoDB, чтобы сделать это для вас.
Посмотрите здесь, чтобы увидеть простой учебник PHP для работы с MongoDB.
Я бы с радостью создал для вас библиотеку, но это принесло бы цену.:-p
Ответ 5
Я использую MongoDB w/CI и придумал следующее. Это работает для меня, но я уверен, что его можно немного изменить. Я буду беспокоиться о том, чтобы настроить его позже, но сейчас он делает то, что я хочу.
Я создал модель под названием "database_conn.php"
class Database_Conn extends Model {
function _connect() {
$m = new Mongo();
$db = $m->selectDB( "YOUR DATABASE NAME" );
return $db;
}
}
Затем, если мне нужно подключиться к коллекции из моих моделей.
$collection = Database_Conn::_connect()->selectCollection( "COLLECTION NAME" );