maxgaussdev/ccouchconnect

PHP CouchDB 的 cURL 包装器

dev-master 2016-04-15 11:11 UTC

This package is not auto-updated.

Last update: 2024-09-14 17:59:02 UTC


README

这是一个简单的 PHP CouchDB cURL 包装器,用于 CouchDB 中的基本 CRUD 命令。

#导入

使用 composer

composer require maxgaussdev/ccouchconnect

要导入类,您只需包含 CCouchConnect.php 文件并使用命名空间

include('CCouchConnect.php');

use CCouch\Database\CCouchConnect as Database;

#设置数据库

构造函数支持方法重载,因此基本上有三种方式来创建数据库对象

$db = new Database('database', 'server');
$db = new Database('database', 'server', 5984);
$db = new Database('database', 'server', 5984, 'username', 'password');

默认情况下,端口将设置为 CouchDB 的常用端口 5984。

建议您使用现有的数据库,但如果您需要使用 PHP 创建一个数据库,可以使用 createDatabase() 方法,该方法可以以多种方式使用

// declare a new database that does not exist on the server
$db = new Database('database', 'server');

// we use createDatabase() method to create it
if(!$db->createDatabase->error){
	// success
}else{
	// fail
}

// this can also be set using empty constructor and usual setters
$db = new Database();

$db->setDatabase('dbname');
$db->setServer('localhost');

if(!$db->createDatabase->error){
	// success
}else{
	// fail
}

如果事先未设置,端口将定义为默认的 5984。

#如何使用

公共数据库查询方法将返回 stdObjects 作为结果,如果需要详细信息,请使用 print_r()。

有几个方法允许您对对象执行基本的 CRUD。默认情况下,返回值将是 php 的 stdObjects。

数据库信息

$result = $db->dbInfo();

#创建文档

$document = array(
    "name" => "foo",
    "occupation" => "bar"
);
$result = $db->addNew($document);

这将返回一个默认带有 createdAt 和 updatedAt 参数的 std object(使用 Datetime),如下所示

stdClass Object
(
    [_id] => efdf1c6dde49b78bf9834424131037f5
    [_rev] => 1-4fb5af102470b0304292ec418e0cab09
    [name] => foo
    [occupation] => bar
    [createdAt] => stdClass Object
        (
            [date] => 2016-04-08 11:41:06.000000
            [timezone_type] => 3
            [timezone] => Europe/Berlin
        )

    [updatedAt] => stdClass Object
        (
            [date] => 2016-04-08 11:41:06.000000
            [timezone_type] => 3
            [timezone] => Europe/Berlin
        )

)

#获取文档

有几个方法可以从 CouchDB 中检索文档。


// returns document object by _id
$result = $db->findById('efdf1c6dde49b78bf9834424131037f5'); 

// returns an array of document objects filtered by array of keys and their values
$result = $db->findBy(array("key" => "value")); 

// returns a document object filtered by array of keys and their values
$result = $db->findOneBy(array("key" => "value")); 

// example with our object above:
$result = $db->findOneBy(array("name" => "foo", "occupation" => "bar"));

$result = $db->findAll(); 
// returns an array of all document objects

findBy() 方法在数据库中创建一个视图(默认设计文档为 _design/ccouch_views),每个搜索输入都有一个视图名称的 md5 哈希。

如果您不希望在设计文档中缓存搜索数据,有两种以下方法

$result = $db->findByNoCache(array("key" => "value"));
$result = $db->findOneByNoCache(array("key" => "value"));

这两种方法都将使用临时视图返回数据。

如果您希望搜索具有关键字值的文档,无论是否指定参数,都实现了一个简单的搜索方法

$result = $db->search('keyword');

#带有限制和偏移量查找文档

限制和偏移量可以使用以下方式使用,并且是可选参数

$result = $db->findAll($limit, $offset);
$result = $db->findByNoCache(array("key" => "value"),$limit, $offset);
$result = $db->findBy(array("key" => "value"),$limit, $offset); 

#更新和删除文档

更新文档很简单,您只需将对象作为参数传递给 save() 方法

// some document from the database
$document = $db->findById('efdf1c6dde49b78bf9834424131037f5');
$document->name = "foo foo";

$result = $db->save($document);

删除文档

// some document from the database
$document = $db->findById('efdf1c6dde49b78bf9834424131037f5');

$result = $db->delete($document);

尽管不推荐,但您还可以清除文档。典型 CouchDb 清除规则适用

// some document from the database
$document = $db->findById('efdf1c6dde49b78bf9834424131037f5');

$result = $db->purge($document);

#批量方法

目前有两种批量方法。在单个请求中添加和删除多个文档

// some documents
$documentsArray = array($document1, $document2, $document3,...); 

// add multiple new documents
$result = $db->saveBulk($documentsArray);

// delete multiple documents
$result = $db->deleteBulk($documentsArray);

这两种方法都将接受文档对象的数组作为参数。返回结果将是一个包含状态的对象的数组。

#附加方法

// get document ids (findAll() withoud document details)
$result = $db->listDocuments();

// get ids of changed documents
$result = $db->listChanges();

// get list of all databases
$result = $db->listDatabases();

// delete database
$result = $db->deleteDatabase();

#未来版本

以下是未来版本的计划列表

  • 支持自定义视图操作
  • 附件支持
  • 缓存清理
  • 文档更新