CodeIgniterからMongoDBを操作できるようにするチュートリアルやライブラリなどを教えてくれる人はいますか?
「CodeIgniterの方法」かどうかはわかりませんが、現在のデータベース接続を保存するための追加のプロパティでMongoクラスを拡張するCodeIgniterライブラリを作成しました。
ここに私のプロジェクトからの関連するコードファイルがあります。
config/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;
}
}
そしてサンプルコントローラー
controllers/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);
}
}
MongoDBはCodeIgniterコミュニティ内で非常によくサポートされています。時間をかけて:pに飛び込んでください
Stephen Curranの例はシンプルで、Phpで記述された機能が多すぎることなくMongoへのインターフェイスを許可するため、気に入っています。
データベース認証を含むように彼の例を拡張しました。ここに移動: http://www.mongodb.org/display/DOCS/Security+and+Authentication mongo認証について読むには、接続先のMongoサーバーの認証を有効にすることを忘れないでください。
また、古いスタイルのコンストラクター関数を__constructに変更し、ユーザー名とパスワードが明らかになる可能性があるため、Mongo接続例外を処理しています。
<?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 */
<?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:$password@$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'));
}
}
}
CodeIgniterでのMongoDBの操作は、他の場所での操作とそれほど変わりません。
コンストラクターで接続し、後でメソッドで使用する$ this-> connを保存するMongoDBライブラリを組み合わせることもできます。
次に、コントローラーのconnプロパティを直接操作するか、MongoDBライブラリにいくつかのメソッドを作成してこれを実行します。
こちら を見て、PHP MongoDBを操作するためのチュートリアルを参照してください。
喜んでこのためのライブラリを作成しますが、代償が伴います。 :-p
CIでMongoDBを使用していますが、次のように思いつきました。それは私のために動作しますが、私はそれが多少調整できると確信しています。後でそれを微調整することを心配しますが、今は私が望むことをします。
「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" );