cubettech/lacassa

基于Cassandra的laravel查询构建器。

v1.1 2017-03-29 06:54 UTC

This package is not auto-updated.

Last update: 2024-09-29 04:42:39 UTC


README

一个支持Cassandra的查询构建器,使用原始的Laravel API。这个库扩展了原始的Laravel类,因此使用完全相同的方法。

目录

  • 安装

  • 配置

  • 查询构建器

  • 模式

  • 扩展

  • 示例

安装

请确保您已安装Apache Cassandra的DataStax PHP驱动程序。您可以在https://github.com/datastax/php-driverhttps://github.com/datastax/php-driver/blob/master/ext/README.md找到安装说明。

datastax php-driver需要php版本5.6+

使用composer安装

composer require cubettech/lacassa

并在config/app.php中添加服务提供者

Cubettech\Lacassa\CassandraServiceProvider::class,

配置

更改config/database.php中的默认数据库连接名称

'default' => env('DB_CONNECTION', 'cassandra'),

并添加一个新的cassandra连接

'cassandra' => [
	 	'driver' => 'Cassandra',
		'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', 7199),
        'keyspace' => env('DB_DATABASE', 'cassandra_db'),
    	'username' => env('DB_USERNAME', ''),
    	'password' => env('DB_PASSWORD', ''),
 ],

认证

您可以使用Laravel的原生认证功能用于cassandra,确保您的config/auth.php看起来像这样

    'providers' => [
    // 'users' => [
    //     'driver' => 'eloquent',
    //     'model' => App\User::class,
    // ],
    'users' => [
        'driver' => 'database',
        'table' => 'users',
    ],
        ],

模式

数据库驱动程序也具有(有限)模式构建器支持。您可以轻松地操作表并设置索引

    Schema::create(
        'users', function ($table) {
            $table->int('id');
            $table->text('name');
            $table->text('email');
            $table->text('password');
            $table->text('remember_token');
            $table->setCollection('phn', 'bigint');
            $table->listCollection('hobbies', 'text');
            $table->mapCollection('friends', 'text', 'text');
            $table->primary(['id']);
      });

DROP表

    Schema::drop('users');

支持的CQL数据类型

text('a')

bigint('b')

blob('c')

boolean('d')

counter('e')

decimal('f')

double('g')

float('h')

frozen('i')

inet('j')

nt('k')

listCollection('l', 'text')

mapCollection('m', 'timestamp', 'text')

setCollection('n', 'int')

timestamp('o')

timeuuid('p')

tuple('q', 'int', 'text', 'timestamp')

uuid('r')

varchar('s')

varint('t')

ascii('u')

主键

primary(['a', 'b'])

查询构建器

数据库驱动程序可以直接连接到原始查询构建器。在使用cassandra连接时,您将能够构建流畅的查询以执行数据库操作。

$emp = DB::table('emp')->get();

$emp = DB::table('emp')->where('emp_name', 'Christy')->first();

如果您没有更改默认的数据库连接,您在查询时需要指定它。

$emp = DB::connection('cassandra')->table('emp')->get();

示例

基本用法

检索所有记录

$emp = DB::table('emp')->all();

索引列

CREATE INDEX为给定表中的指定列创建一个新索引。

DB::table('users')->index(['name']);

选择列

$emp = DB::table('emp')->where('emp_no', '>', 50)->select('emp_name', 'emp_no')->get();

$emp = DB::table('emp')->where('emp_no', '>', 50)->get(['emp_name', 'emp_no']);

WHERE子句

WHERE子句指定要查询的行。在WHERE子句中,使用实际名称而不是别名来引用列。WHERE子句中的列需要满足以下要求之一

  • 分区键定义包括该列。

  • 使用CREATE INDEX索引的列。

      $emp = DB::table('emp')->where('emp_no', '>', 50)->take(10)->get();
    

AND语句

$emp = DB::table('emp')->where('emp_no', '>', 50)->where('emp_name', '=', 'Christy')->get();

使用数组中的WHERE IN

$emp = DB::table('emp')->whereIn('emp_no', [12, 17, 21])->get();

ORDER BY

ORDER BY子句只能选择单个列。排序可以是升序或降序,默认为升序,可以使用ASC或DESC关键字指定。在ORDER BY子句中,使用实际名称而不是别名来引用列。

$emp = DB::table('emp')->where('emp_name','Christy')->orderBy('emp_no', 'desc')->get();

LIMIT

我们可以使用limit()和take()来限制查询。

$emp = DB::table('emp')->where('emp_no', '>', 50)->take(10)->get();

$emp = DB::table('emp')->where('emp_no', '>', 50)->limit(10)->get();

Distinct

Distinct需要指定一个字段来返回不同的值。

$emp = DB::table('emp')->distinct()->get(['emp_id']);

Distinct可以与where结合使用

$emp = DB::table('emp')->where('emp_sal', 45000)->distinct()->get(['emp_name']);

Count

$number = DB::table('emp')->count();

Count可以与where结合使用

$sal = DB::table('emp')->where('emp_sal', 45000)->count();

截断

$sal = DB::table('emp')->truncate();

过滤集合集合、列表或映射

您可以索引集合列,然后在WHERE子句中使用CONTAINS条件来过滤特定值的数据。

$emp = DB::table('emp')->where('emp_name','contains', 'Christy')->get();

索引venues映射中的集合键后,您可以对映射键进行过滤。

$emp = DB::table(emp')->where('todo','contains key', '2014-10-02 06:30:00+0000')->get();

原始查询

CQL表达式可以直接注入到查询中。

$emp = DB::raw('select * from emp');

插入、更新和删除

插入、更新和删除记录的工作方式与原始QB相同。

插入

DB::table('emp')->insert(['emp_id' => 11, 'emp_city' => '{"kochi", "tvm", "kollam"}', 'emp_name' => 'Christy', 'emp_phone' => 12345676890, 'emp_sal' => 500]);

更新

要更新一个模型,您可以检索它,更改一个属性,然后使用更新方法。

DB::table('emp')->where('emp_id', 11)->update(['emp_city' => 'kochi', 'emp_name' => 'Christy jos', 'emp_phone' =>  1234567890]);

更新集合集、列表和映射

行更新集合。方法将类似于

updateCollection(collection_type, column_name, operator, value);

Collection_type可以是集合、列表或映射中的任何一个。

Column_name是要更新的列的名称。

Operator是+或-,+用于向集合中添加值,-用于从集合中删除值。

Value对于映射类型可以是关联数组,对于列表和集合类型可以是字符串/数字数组。

DB::table('users')->where('id', 1)->updateCollection('set', 'phn', '+', [123, 1234,12345])->update();

DB::table('users')->where('id', 1)->updateCollection('set', 'phn', '-', [123])->update();

DB::table('users')->where('id', 1)->updateCollection('list', 'hobbies', '+', ['reading', 'cooking', 'cycling'])->update();

DB::table('users')->where('id', 1)->updateCollection('list', 'hobbies', '-', ['cooking'])->update();

DB::table('users')->where('id', 1)->updateCollection('map', 'friends', '+', ['John' => 'Male', 'Rex' => 'Male'])->update();

DB::table('users')->where('id', 1)->updateCollection('map', 'friends', '-', ['John'])->update();

删除

要删除一个模型,只需在实例上调用删除方法。我们可以通过使用deleteRow方法删除表中的行

$emp = DB::table('emp')->where('emp_city', 'Kochi')->deleteRow();

我们还可以使用deleteColumn方法通过表中的列执行删除操作

$emp = DB::table('emp')->where('emp_id', 3)->deleteColumn();