jfelder/oracledb

Laravel的Oracle数据库驱动程序

11.0.2 2024-09-10 16:18 UTC

README

OracleDB (针对Laravel 11更新)

Build Status Total Downloads Latest Stable Version License

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_HOSTDB_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驱动程序中的virtualAsstoredAs以及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许可证