cooperl / laravel-ibmi
laravel-ibmi 是一个简单的 DB2 & Toolkit for IBMi 服务提供程序,适用于 Laravel。它通过扩展 Laravel 框架的 Illuminate 数据库组件提供 DB2 连接。此外,它还提供了 Toolkit for IBMi,以便您可以使用相同的凭据访问 IBMi 资源。
Requires
- php: ^8.0|^8.1|^8.2
- cooperl/laravel-db2: ^9.0
- zendtech/ibmitoolkit: ^1.9.0
README
laravel-ibmi 是一个简单的 DB2 & Toolkit for IBMi 服务提供程序,适用于 Laravel。它通过扩展 Laravel 框架的 Illuminate 数据库组件提供 DB2 连接。此外,它还提供了 Toolkit for IBMi,以便您可以使用相同的凭据访问 IBMi 资源。
安装
将 laravel-ibmi 添加到您的 composer.json 文件
"require": {
"cooperl/laravel-ibmi": "^7.0"
}
使用 composer 安装此包。
$ composer update
配置
配置 laravel-ibmi 有两种方法。您可以选择最方便的方法。您可以将您的 DB2 凭据放入 app/config/database.php
文件(选项 1)或使用通过 artisan 命令行生成的包配置文件(选项 2)。
选项 1:使用 app/config/database.php
文件配置 DB2
只需将以下代码添加到您的 app/config/database.php
文件末尾即可
/* |-------------------------------------------------------------------------- | DB2 Databases |-------------------------------------------------------------------------- */ 'ibmi' => [ 'driver' => 'db2_ibmi_odbc', // or 'db2_ibmi_ibm' / 'db2_zos_odbc' / 'db2_expressc_odbc 'driverName' => '{IBM i Access ODBC Driver}', // or '{iSeries Access ODBC Driver}' / '{IBM i Access ODBC Driver 64-bit}' 'host' => 'server', 'username' => '', 'password' => '', 'database' => 'WRKRDBDIRE entry', 'prefix' => '', 'schema' => 'default schema', 'port' => 50000, 'date_format' => 'Y-m-d H:i:s', // or 'Y-m-d H:i:s.u' / 'Y-m-d-H.i.s.u'... 'odbc_keywords' => [ 'SIGNON' => 3, 'SSL' => 0, 'CommitMode' => 2, 'ConnectionType' => 0, 'DefaultLibraries' => '', 'Naming' => 0, 'UNICODESQL' => 0, 'DateFormat' => 5, 'DateSeperator' => 0, 'Decimal' => 0, 'TimeFormat' => 0, 'TimeSeparator' => 0, 'TimestampFormat' => 0, 'ConvertDateTimeToChar' => 0, 'BLOCKFETCH' => 1, 'BlockSizeKB' => 32, 'AllowDataCompression' => 1, 'CONCURRENCY' => 0, 'LAZYCLOSE' => 0, 'MaxFieldLength' => 15360, 'PREFETCH' => 0, 'QUERYTIMEOUT' => 1, 'DefaultPkgLibrary' => 'QGPL', 'DefaultPackage' => 'A /DEFAULT(IBM),2,0,1,0', 'ExtendedDynamic' => 0, 'QAQQINILibrary' => '', 'SQDIAGCODE' => '', 'LANGUAGEID' => 'ENU', 'SORTTABLE' => '', 'SortSequence' => 0, 'SORTWEIGHT' => 0, 'AllowUnsupportedChar' => 0, 'CCSID' => 819, 'GRAPHIC' => 0, 'ForceTranslation' => 0, 'ALLOWPROCCALLS' => 0, 'DB2SQLSTATES' => 0, 'DEBUG' => 0, 'TRUEAUTOCOMMIT' => 0, 'CATALOGOPTIONS' => 3, 'LibraryView' => 0, 'ODBCRemarks' => 0, 'SEARCHPATTERN' => 1, 'TranslationDLL' => '', 'TranslationOption' => 0, 'MAXTRACESIZE' => 0, 'MultipleTraceFiles' => 1, 'TRACE' => 0, 'TRACEFILENAME' => '', 'ExtendedColInfo' => 0, ], 'options' => [ PDO::ATTR_CASE => PDO::CASE_LOWER, PDO::ATTR_PERSISTENT => false ] + (defined('PDO::I5_ATTR_DBC_SYS_NAMING') ? [PDO::I5_ATTI5_ATTR_DBC_SYS_NAMINGR_COMMIT => false] : []) + (defined('PDO::I5_ATTR_COMMIT') ? [PDO::I5_ATTR_COMMIT => PDO::I5_TXN_NO_COMMIT] : []) + (defined('PDO::I5_ATTR_JOB_SORT') ? [PDO::I5_ATTR_JOB_SORT => false] : []) + (defined('PDO::I5_ATTR_DBC_LIBL') ? [PDO::I5_ATTR_DBC_LIBL => ''] : []) + (defined('PDO::I5_ATTR_DBC_CURLIB') ? [PDO::I5_ATTR_DBC_CURLIB => ''] : []), 'toolkit' => [ 'sbmjobParams' => 'ZENDPHP7/ZSVR_JOBD/XTOOLKIT', 'XMLServiceLib' => 'ZENDPHP7', 'debug' => false, 'debugLogFile' => storage_path('logs / toolkit_gigc . log'), 'InternalKey' => ' / tmp / ' . 'Toolkit_' . env('APP_ENV') . '_' . random_int(1, 10), 'stateless' => false, 'plugSize' => '512K', 'encoding' => "UTF-8", 'ccsidBefore' => "819/1147", 'ccsidAfter' => "1147/1208", 'useHex' => true ], ],
驱动设置可以是
- 'db2_ibmi_odbc' 用于 IBMi ODBC 连接
- 'db2_ibmi_ibm' 用于 IBMi PDO_IBM 连接
- 'db2_zos_odbc' 用于 zOS ODBC 连接
- 'db2_expressc_odbc' 用于 Express-C ODBC 连接
如果驱动是 'db2_*_odbc',则必须将数据库设置为 ODBC 连接名称。如果驱动是 'db2_ibmi_ibm',则必须将数据库设置为 IBMi 数据库名称(WRKRDBDIRE)。
选项 2:使用包配置文件配置 DB2
从项目根目录在命令行中运行
$ php artisan vendor:publish
与上述相同方式在 app/config/db2.php
中设置您的 laravel-db2 凭据
使用
数据库使用
请参阅 Laravel 框架文档。
Toolkit for IBMi 使用
此包附带一个名为 TS
的 facade,用于 ToolkitService,这是主类的名称。
以下是如何使用此 facade 的示例
$param[] = TS::AddParameterChar('both', 10, 'InventoryCode', 'code', $code); $param[] = TS::AddParameterChar('both', 10, 'Description', 'desc', $desc); $result = TS::PgmCall("COMMONPGM", "ZENDSVR", $param, null, null); if($result) { var_dump($result['io_param']); } else { echo "Execution failed."; }
如果您想选择除默认连接之外的另一个连接,只需这样做
$param[] = TS::connection('other_connection')->AddParameterChar('both', 10, 'InventoryCode', 'code', $code); $param[] = TS::connection('other_connection')->AddParameterChar('both', 10, 'Description', 'desc', $desc); $result = TS::connection('other_connection')->PgmCall("COMMONPGM", "ZENDSVR", $param, null, null); if($result) { var_dump($result['io_param']); } else { echo "Execution failed."; }
有关更多信息,请参阅 PHP XMLSERVICE Toolkit 文档。