Laravel 5
PHP 7.1+
No commit activity in last 2 years
No release in over 2 years
There's a lot of open issues
Couchbase providers for Laravel
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

symfony/framework-bundle
^4.0
symfony/console
^4.0
phpunit/phpunit
^6.0
satooshi/php-coveralls
*
phploc/phploc
*
pdepend/pdepend
^2.2.4
phpmd/phpmd
@stable

Runtime

 Project Readme

Laravel-Couchbase

for Laravel 5.1.*(higher)

cache, session, database, queue extension package required ext-couchbase

Build Status Code Coverage Scrutinizer Code Quality StyleCI

Packagist Packagist Packagist Codacy Badge

SensioLabsInsight

Notice

Supported Auto-Discovery, Design Document, Cache Lock (Laravel5.5)

Laravel version Laravel-Couchbase version ext-couchbase
Laravel 5.6 ^1.1 >=2.3.2
Laravel 5.5 ^1.0 >=2.3.2
Laravel 5.4 ^0.7 ^2.2.2
Laravel 5.3 ^0.6 ^2.2.2
Laravel 5.2 ^0.5 ^2.2.2
Laravel 5.1 ^0.4 ^2.2.2

Deprecated

not recommended couchbase-memcached driver couchbase session driver

install

$ composer require ytake/laravel-couchbase

or your config/app.php

'providers' => [
    // added service provider
    \Ytake\LaravelCouchbase\CouchbaseServiceProvider::class,
    \Ytake\LaravelCouchbase\ConsoleServiceProvider::class,
]

usage

database extension

add database driver(config/database.php)

'couchbase' => [
    'driver' => 'couchbase',
    'host' => 'couchbase://127.0.0.1',
    'user' => 'userName', // optional administrator
    'password' => 'password', // optional administrator
    // optional configuration / management operations against a bucket.
    'administrator' => [
        'user'     => 'Administrator',
        'password' => 'password',
    ],
],

case cluster

'couchbase' => [
    'driver' => 'couchbase',
    'host' => 'couchbase://127.0.0.1,192.168.1.2',
    'user' => 'userName', // optional administrator
    'password' => 'password', // optional administrator
],

choose bucket table() method or

basic usage bucket() method

N1QL supported(upsert enabled)

see http://developer.couchbase.com/documentation/server/4.1/n1ql/n1ql-language-reference/index.html

SELECT

// service container access
$this->app['db']->connection('couchbase')
    ->table('testing')->where('whereKey', 'value')->first();

// use DB facades
\DB::connection('couchbase')
    ->table('testing')->where('whereKey', 'value')->get();

INSERT / UPSERT

$value = [
    'click' => 'to edit',
    'content' => 'testing'
];
$key = 'insert:and:delete';

$result = \DB::connection('couchbase')
    ->table('testing')->key($key)->insert($value);

\DB::connection('couchbase')
    ->table('testing')->key($key)->upsert([
        'click'   => 'to edit',
        'content' => 'testing for upsert',
    ]);

DELETE / UPDATE

\DB::connection('couchbase')
    ->table('testing')->key($key)->where('clicking', 'to edit')->delete();

\DB::connection('couchbase')
    ->table('testing')->key($key)
    ->where('click', 'to edit')->update(
        ['click' => 'testing edit']
    );
execute queries

example)

"delete from testing USE KEYS "delete" RETURNING *"
"update testing USE KEYS "insert" set click = ? where click = ? RETURNING *"

returning

default *

\DB::connection('couchbase')
    ->table('testing')
    ->where('id', 1)
    ->offset($from)->limit($perPage)
    ->orderBy('created_at', $sort)
    ->returning(['id', 'name'])->get();

View Query

$view = \DB::view("testing");
$result = $view->execute($view->from("dev_testing", "testing"));

cache extension

for bucket type couchbase

config/cache.php

'couchbase' => [
   'driver' => 'couchbase',
   'bucket' => 'session'
],

for bucket type memcached

'couchbase-memcached' => [
    'driver'  => 'couchbase-memcached',
    'servers' => [
        [
            'host' => '127.0.0.1',
            'port' => 11255,
            'weight' => 100,
            'bucket' => 'memcached-bucket-name',
            'option' => [
                // curl option
            ],
        ],
    ],
],

not supported

couchbase bucket, use bucket password

config/cache.php

'couchbase' => [
   'driver' => 'couchbase',
   'bucket' => 'session',
   'bucket_password' => 'your bucket password'
],

session extension

.env etc..

specify couchbase driver

consistency

default :CouchbaseN1qlQuery::NOT_BOUNDED

$this->app['db']->connection('couchbase')
    ->consistency(\CouchbaseN1qlQuery::REQUEST_PLUS)
    ->table('testing')
    ->where('id', 1)
    ->returning(['id', 'name'])->get();

callable consistency

$this->app['db']->connection('couchbase')
    ->callableConsistency(\CouchbaseN1qlQuery::REQUEST_PLUS, function ($con) {
        return $con->table('testing')->where('id', 1)->returning(['id', 'name'])->get();           
    });

Event

for N1QL

events description
\Ytake\LaravelCouchbase\Events\QueryPrepared get n1ql query
\Ytake\LaravelCouchbase\Events\ResultReturning get all property from returned result
\Ytake\LaravelCouchbase\Events\ViewQuerying for view query (request uri)

Schema / Migrations

The database driver also has (limited) schema builder support.
easily manipulate indexes(primary and secondary)

use Ytake\LaravelCouchbase\Schema\Blueprint as CouchbaseBlueprint;

\Schema::create('samples', function (CouchbaseBlueprint $table) {
    $table->primaryIndex(); // primary index
    $table->index(['message', 'identifier'], 'sample_secondary_index'); // secondary index
    // dropped
    $table->dropIndex('sample_secondary_index'); 
    $table->dropPrimary();
});

Supported operations:

  • create and drop
  • index and dropIndex (primary index and secondary index)

Artisan

for couchbase manipulate indexes

commands description
couchbase:create-index Create a secondary index for the current bucket.
couchbase:create-primary-index Create a primary N1QL index for the current bucket.
couchbase:drop-index Drop the given secondary index associated with the current bucket.
couchbase:drop-primary-index Drop the given primary index associated with the current bucket.
couchbase:indexes List all N1QL indexes that are registered for the current bucket.
couchbase:create-queue-index Create primary index, secondary indexes for the queue jobs couchbase bucket.
couchbase:create-design Inserts design document and fails if it is exist already. for MapReduce views

-h more information.

create design

config/couchbase.php

return [
    'design' => [
        'Your Design Document Name' => [
            'views' => [
                'Your View Name' => [
                    'map' => file_get_contents(__DIR__ . '/../resources/sample.ddoc'),
                ],
            ],
        ],
    ]
];

Queue

Change the the driver in config/queue.php:

    'connections' => [
        'couchbase' => [
            'driver' => 'couchbase',
            'bucket' => 'jobs',
            'queue' => 'default',
            'retry_after' => 90,
        ],
    ],

example

php artisan queue:work couchbase --queue=send_email

hacking

To run tests there are should be following buckets created on local Couchbase cluster:

$cluster = new CouchbaseCluster('couchbase://127.0.0.1');
$clusterManager = $cluster->manager('Administrator', 'password');
$clusterManager->createBucket('testing', ['bucketType' => 'couchbase', 'saslPassword' => '', 'flushEnabled' => true]);
$clusterManager->createBucket('memcache-couch', ['bucketType' => 'memcached', 'saslPassword' => '', 'flushEnabled' => true]);
sleep(5);
$bucketManager = $cluster->openBucket('testing')->manager();
$bucketManager->createN1qlPrimaryIndex();

Also tests are expecting regular Memcached daemon listening on port 11255.

soon

  • authintication driver
  • Eloquent support

Couchbase Document

REST API / Creating and Editing Buckets
couchbase-cli / user-manage
Authentication
Authorization API