由於專案的資料庫需要用客戶購買的Oracle資料庫,所以需要php安裝oci擴充套件。
php
: 7.2
系統
: windows10
oracle
: 11gR2
由於php的oci8擴充套件還是需要使用到oracle的一些包,所以先下載這一些。
下載完成後解壓縮這個壓縮包,並且將這個包的路徑新增到PATH中。
windows可以直接到這個網址上下載相應的dll,pecl oci8
如果是安裝了pecl的話,可以直接執行 pecl install oci8
下載完成後放到php的ext目錄下,並且編輯php.ini
檔案,新增extension=php_oci8.dll
這樣就完成了php與oracle的配置了。
Laravel預設支援的資料庫不包含oracle,可以使用 yajra/laravel-oci8
這一個包來讓Laravel支援oracle
composer require yajra/laravel-oci8
由於這個包已經支援Laravel的自動載入,也就不需要自己手動去註冊了
"extra": {
"branch-alias": {
"dev-master": "5.6-dev"
},
"laravel": {
"providers": [
"Yajra\\Oci8\\Oci8ServiceProvider"
]
}
},
這樣就可以使用php連線到oracle了。
我們在使用migration來管理表格的時候,一般情況下會對每一個表都要有註釋(為了別人能看得懂。。。)。然而這個包有一個bug,就是對於表格的註釋缺少了字首。
表格的註釋是
成員變數
而不是方法
噢。
/**
* Run the comment on table statement.
* Comment set by $table->comment = 'comment';.
*
* @param \Yajra\Oci8\Schema\OracleBlueprint $blueprint
*/
private function commentTable(OracleBlueprint $blueprint)
{
$table = $this->wrapValue($blueprint->getTable());
if ($blueprint->comment != null) {
$this->connection->statement("comment on table {$table} is '{$blueprint->comment}'");
}
}
這一段程式碼在/vendor/yajar/laravel-oci8/src/Oci8/Schema/Comment.php
中第40行。
這裡少了對錶字首的引用,導致我們在migrate的時候生成的sql是缺少了表字首的,所以在這裡新增一個表字首上去解決這個問題
/**
* Run the comment on table statement.
* Comment set by $table->comment = 'comment';.
*
* @param \Yajra\Oci8\Schema\OracleBlueprint $blueprint
*/
private function commentTable(OracleBlueprint $blueprint)
{
$table = $this->wrapValue($blueprint->getTable());
if ($blueprint->comment != null) {
$this->connection->statement("comment on table {$this->connection->getTablePrefix()}{$table} is '{$blueprint->comment}'");
}
}