質問

誰かがチュートリアルやライブラリなどを教えてくれませんか。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;
    }
}

そしてサンプルコントローラー

コントローラー/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);
    }
}

他のヒント

それは簡単で、PHPの中に書かれた、あまりにも多くの機能なしモンゴへのインタフェースを可能にするよう

私はスティーブン・カランの例が好き、私は巨大な抽象化は、私は後にしています何のための時間に多くのビットをclases見つけるために傾向がある。

私は、データベース認証を含めるために彼の例を拡張してきました。ここに行く: http://www.mongodb.org/display/DOCS/Security +と+認証のモンゴ認証について読むために、あなたがに接続されているモンゴサーバーの認証を有効にすることを忘れないでください。

私も__constructするために、古い形式のコンストラクタ関数を変更しているし、彼らはあなたのユーザ名とパスワードを明らかにすることができますようモンゴ接続の例外を処理しています。

設定/ 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:$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のチュートリアルを参照してくださいをrel="nofollow MongoDBのます。

私は喜んであなたにこのためのライブラリを作成したいが、それは価格が付属しています。 :-P

私はCI / wの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" );
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top