jfelder / oracledb
Laravel的Oracle数据库驱动程序
Requires
- php: ^8.2
- illuminate/database: ^11.0
- illuminate/pagination: ^11.0
Requires (Dev)
- laravel/pint: ^1.13
- mockery/mockery: ^1.6
- phpunit/phpunit: ^11.0.1
- dev-master
- 11.0.2
- 11.0.1
- 11.0.0
- 10.x-dev
- 10.0.0
- 9.x-dev
- 9.0.1
- 9.0.0
- 8.x-dev
- 8.0.0
- 7.x-dev
- 7.0.3
- 7.0.2
- 7.0.1
- 7.0.0
- 6.x-dev
- 6.0.3
- 6.0.2
- 6.0.1
- 6.0.0
- 5.8.x-dev
- 5.8.1
- 5.8.0
- 5.7.x-dev
- 5.7.1
- 5.6.x-dev
- 5.6.4
- 5.6.3
- 5.6.2
- 5.6.1
- 5.6.0
- 5.4.x-dev
- 5.4.4
- 5.4.3
- 5.4.2
- 5.4.1
- 5.3.x-dev
- 5.3.2
- 5.3.1
- 5.2.x-dev
- 5.2.2
- 5.2.1
- 5.1.x-dev
- 5.1.2
- 5.1.1
- 4.2.x-dev
- 4.2.1
- 4.1.x-dev
- 4.1.1
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- 0.3.0
- 0.2.1
- 0.2.0
This package is auto-updated.
Last update: 2024-09-10 16:19:13 UTC
README
OracleDB (针对Laravel 11更新)
OracleDB是为Laravel框架设计的Oracle数据库驱动程序包 - 感谢 @taylorotwell。OracleDB是Illuminate/Database的扩展,它使用封装在PDO命名空间中的OCI8函数。
请报告您可能发现的任何错误。
安装
使用Composer
composer require jfelder/oracledb
在此命令过程中,Laravel的“自动发现”功能应自动注册OracleDB的服务提供者。
接下来,使用Artisan命令发布OracleDB的配置文件。这将OracleDB的配置文件复制到您项目中的config/oracledb.php
。
php artisan vendor:publish --tag=oracledb-config
为了完成安装,将您的环境变量(通常在您的.env文件中)设置为在config/oracledb.php
中使用的相应环境变量:例如DB_HOST
、DB_USERNAME
等。
请仔细检查您的日期格式配置。date_format
配置为所有日期列的Carbon转换提供动力,默认为Y-m-d H:i:s
,因此如果您的数据库以不同的方式字符串化日期,例如d-M-y H:i:s
,则必须设置DB_DATE_FORMAT环境变量。这会影响任何具有日期字段的Eloquent模型的所有读写操作以及任何使用Carbon实例的QueryBuilder查询。
基本用法
此包的配置文件位于config/oracledb.php
。在此文件中,您定义所有Oracle数据库连接。如果您需要建立多个连接,只需复制示例连接即可。如果您想使其中一个连接成为默认连接,请在config/database.php
中的“默认数据库连接名称”部分输入您为连接给出的名称。
一旦您配置了OracleDB数据库连接,您就可以像通常一样使用DB
外观运行查询。
注意:默认驱动程序
'oci8'
在内部使用OCI8函数。如果您想使用PDO_OCI,请在config/oracledb.php
文件中将driver
值更改为'pdo'
。
$results = DB::select('select * from users where id = ?', [1]);
上述语句假定您已将默认连接设置为在config/database.php文件中设置的Oracle连接,并且将始终返回一个array
结果。
$results = DB::connection('oracle')->select('select * from users where id = ?', [1]);
就像内置的数据库驱动程序一样,您可以使用连接方法访问在config/oracledb.php文件中设置的Oracle数据库。
向具有自增ID的表中插入记录
$id = DB::connection('oracle')->table('users')->insertGetId( ['email' => 'john@example.com', 'votes' => 0], 'userid' );
注意:当使用insertGetId方法时,您可以将自动递增列的名称指定为insertGetId函数的第二个参数。如果没有指定,它将默认为"id"。
有关更多信息,请参阅Laravel数据库基本文档。
未实现的功能
本包中未实现某些第三方Laravel数据库驱动程序的功能。欢迎通过拉取请求来实现这些功能,或如果您发现未列出的未实现功能,也可以扩展此列表。
查询构建器
- 通过groupLimit子句进行分组限制
$query->groupLimit($value, $column);
备注:此功能仅在Laravel中添加,以便Eloquent可以限制每个父级加载的查询结果的数量 - insertOrIgnore
DB::from('users')->insertOrIgnore(['email' => 'foo']);
- 使用空值插入getGetId
DB::from('users')->insertGetId([]);
(但支持使用非空值调用) - upserts
DB::from('users')->upsert([['email' => 'foo', 'name' => 'bar'], ['name' => 'bar2', 'email' => 'foo2']], 'email');
- 与联接删除
DB::from('users')->join('contacts', 'users.id', '=', 'contacts.id')->where('users.email', '=', 'foo')->delete();
- 与limit删除
DB::from('users')->where('email', '=', 'foo')->orderBy('id')->take(1)->delete();
- json操作
DB::from('users')->where('items->sku', '=', 'foo-bar')->get();
- whereFulltext
DB::table('users')->whereFulltext('description', 'Hello World');
Eloquent
- 将Eloquent模型上的$guarded设置为一个非空数组。您的模型必须完全未定义$guarded,或将它设置为一个空数组。否则,Eloquent可能会尝试运行一个列列表SQL查询,导致异常。
- 限制每个父级加载的查询结果的数量,例如,每个用户只能获取3篇帖子
User::with(['posts' => fn ($query) => $query->limit(3)])->paginate();
模式构建器
- 如果存在,则删除一个表
Schema::dropIfExists('some_table');
- 删除所有表、视图或类型
Schema::dropAllTables()
,Schema::dropAllViews()
,和Schema::dropAllTypes()
- 在表上设置校对
$blueprint->collation('BINARY_CI');
- 在列上设置校对
$blueprint->string('some_column')->collation('BINARY_CI');
- 在表上设置注释
$blueprint->comment("This table is great.");
- 在列上设置注释
$blueprint->string('foo')->comment("关于foo列的一些有用信息");
- 设置自增列的起始值
$blueprint->increments('id')->startingValue(1000)
- 创建一个私有临时表
$blueprint->temporary();
- 重命名索引
$blueprint->renameIndex('foo', 'bar');
- 在创建索引时指定算法(通过第三个参数)
$blueprint->index(['foo', 'bar'], 'baz', 'hash');
- 创建一个空间索引
$blueprint->spatialIndex('coordinates');
- 流畅地创建空间索引
$blueprint->point('coordinates')->spatialIndex();
- 创建一个生成列,如mysql驱动程序中的
virtualAs
和storedAs
以及postgres中的generatedAs
;例如,假设表上存在一个名为price的整数类型列,$blueprint->integer('discounted_virtual')->virtualAs('price - 5');
- 创建一个json列
$blueprint->json('foo');
或jsonb列$blueprint->jsonb('foo');
(Oracle建议将json存储在VARCHAR2、CLOB或BLOB列中) - 创建一个没有精度的带时区的datetime列
$blueprint->dateTimeTz('created_at');
,或带有精度的$blueprint->timestampTz('created_at', 1)
- 创建具有时区组件的Laravel风格的timestamp列
$blueprint->timestampsTz();
- 创建一个uuid列
$blueprint->uuid('foo');
(Oracle建议使用16字节原始数据类型列来存储uuids) - 创建一个外键uuid列
$blueprint->foreignUuid('foo');
- 创建一个用于存储IP地址的列
$blueprint->ipAddress('foo');
(将实现为varchar2 45) - 创建一个用于存储MAC地址的列
$blueprint->macAddress('foo');
(将实现为varchar2 17) - 创建一个几何列
$blueprint->geometry('coordinates');
- 创建一个地理列
$blueprint->geography('coordinates');
- 使用
useCurrent
修饰符创建时间戳列:$blueprint->timestamp('created_at')->useCurrent()
许可协议
许可协议:MIT许可证。