Home > cakephp-couchsource

cakephp-couchsource

Cakephp-couchsource is a project mainly written in PHP, based on the GPL-3.0 license.

CakePHP datasource handling CouchDB

CouchSource

CouchSource is a CakePHP datasource allowing to build Models from a CouchDB database.
This is the one in use on the PathMotion website.

Install

After having set the couchdb engine, follow this steps to make it work with CakePHP :

  • Put the couch_source.php file into the datasource directory, usually app/models/datasource.

  • Edit the database.php configuration file to add the following :

      class DATABASE_CONFIG {
    
          // [...]
    
          var $couch = array(
              'datasource' => 'couch',
              'host' => '127.0.0.1',
              'port' => 5984,
              'user' => 'my_couchdb_user',
              'password' => 'my_couchdb_password',
              'auth_method' => 'cookie' // (or 'basic')
          );
    
      }
  • create a model that you want to use CouchDB

      class MyModel extends Model {
    
          public $name = 'MyModel';
          public $useDbConfig = 'couch';
          public $useTable = 'couchdb_database_name';
          public $primaryKey = 'id';
    
          // since CouchDB is shema-less, the fields here are only required 
          // for CakePHP to validate and save them into the database
          public $_schema = array(
              'id' => array(
                  'type' => 'string',
                  'key' => 'primary',
                  'length' => 32
              ),
              'anyfield' => array(
                  'type' => 'json',
                  'null' => true
              ),
              'anotherfield' => array(
                  'type' => 'json',
                  'null' => true
              )
          );
    
      }

Use Cases

Create an all new document

class MyModel extends Model {

    function create_record() {
        $this->save(array('MyModel' => array(
            'anyfield' => 'anyvalue',
            'anotherfield' => array(
                'title' => 'awesome title'
                'content' => 'less awesome content'
            )
        )));
    }

}

Update an existing document

class MyModel extends Model {

    function update_record($id) {
        $this->save(array('MyModel' => array(
            'id' => $id,
            'anyfield' => 'anyvalue',
            'anotherfield' => array(
                'title' => 'awesome title'
                'content' => 'less awesome content'
            )
        )));
    }

}

Delete an existing document

class MyModel extends Model {

    function delete_record($id) {
        $this->delete($id);
    }

}

Read an existing document

class MyModel extends Model {

    function read_record($id) {
        $this->findById($id);
    }

}

Read data from a view

The find params to use here are :

  • design : the CouchDB design where the view resides

  • view : the name of the view you want to request

  • params : an array of query options

      class MyModel extends Model {
    
          function read_view($start, $end) {
              $this->find('all', array(
                  'design' => 'mycouchdbdesign',
                  'view' => 'mycouchdbview',
                  'params' => array('start_key' => $start, 'end_key' => $end, 'group' => null)
              ));
          }
    
      }
Previous:sample_app