shso /
基于 Cassandra 的 Laravel 查询构建器。
Requires
- php: ^5.6 || ^7.0 || ^7.1
- ext-cassandra: ^1.3
Requires (Dev)
- datastax/php-driver: ^1.3
- johnkary/phpunit-speedtrap: ^2.0 || ^3.0
- orchestra/testbench: >=3.3
- phpunit/phpunit: ^6 || ^7
- symfony/thanks: ^1.1
This package is auto-updated.
Last update: 2021-06-28 13:57:26 UTC
README
正在开发新版本,请等待文档更新
支持 Cassandra 的查询构建器,使用原始 Laravel API。此库扩展了原始 Laravel 类,因此使用完全相同的方法。
目录
-
安装
-
配置
-
查询构建器
-
模式
-
扩展
-
示例
安装
请确保您已安装 Apache Cassandra 的 DataStax PHP 驱动。您可以在 datastax 仓库 中找到安装说明。
注意: datastax php-driver 仅与 php 版本 5.6.*, 7.0.* 和 7.1.* 兼容
使用 Composer 安装
composer require shso/laravel-cassandra
并在 config/app.php 中添加服务提供者
# config/app.php ... providers: [ ..., ShSo\Lacassa\CassandraServiceProvider::class, ..., ], ...
配置
更改 config/database.php 中的默认数据库连接名称
# config/database.php 'default' => env('DB_CONNECTION', 'cassandra'),
并添加一个新的 Cassandra 连接
# config/database.php 'cassandra' => [ 'driver' => 'cassandra', 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', 9042), 'keyspace' => env('DB_DATABASE', 'cassandra_db'), 'username' => env('DB_USERNAME', ''), 'password' => env('DB_PASSWORD', ''), 'page_size' => '5000', 'consistency' => 'local_one', 'timeout' => null, 'connect_timeout' => 5.0, 'request_timeout' => 12.0, ],
注意: 您可以输入所有节点,例如:
# .env
DB_HOST=192.168.100.140,192.168.100.141,192.168.100.142
注意: 您可以选择以下一致性级别之一:
任何 |
三个 |
local_qourum |
local_one |
一个 |
qourum |
each_qourum |
serial |
两个 |
所有 |
local_serial |
查询构建器
数据库驱动程序直接集成到原始查询构建器中。当使用 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()和take()来限制查询。
$emp = DB::table('emp')->where('emp_no', '>', 50)->take(10)->get(); $emp = DB::table('emp')->where('emp_no', '>', 50)->limit(10)->get();
唯一
唯一需要指定一个主键字段来返回唯一值。
$emp = DB::table('emp')->distinct()->get(['emp_id']);
唯一可以与where子句结合使用
$emp = DB::table('emp')->where('emp_sal', 45000)->distinct()->get(['emp_name']);
计数
$number = DB::table('emp')->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') ->insertCollection('set', 'phn', [123, 1234, 12345]) ->insertCollection('map', 'friends', [['John', 'Male'], ['Eli', 'Female']]) ->insert([ 'emp_id' => 11, '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' => 123456789 ]);
更新集合、列表和映射
逐行更新集合。方法如下
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('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(); 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();
删除
要删除一个模型,只需在实例上调用delete方法。我们可以使用deleteRow方法删除表中的行
$emp = DB::table('emp')->where('emp_city', 'Kochi')->deleteRow();
我们还可以使用deleteColumn方法通过表中的列执行删除操作
$emp = DB::table('emp')->where('emp_id', 3)->deleteColumn();
测试
我创建了一个具有php7.0和cassandra php驱动程序的Docker容器。建议用于测试目的。
还有一个run
可执行文件,用于简化Docker容器的使用。它会检查一切,确保所有依赖项和Cassandra服务器都在运行,然后将您的命令传递到容器中。