2016-04-22 111 views
2

我一直在使用PhpStorm大概一週左右,到目前爲止,在建立數據庫連接後,我的所有SQL查詢都正常工作,沒有錯誤。當前的代碼實際上使用了第二個數據庫(一個用於另一個用於特定產品的用戶),所以我在數據庫選項卡中添加了該連接,但它仍然給我一個「無法解析列」的警告。PhpStorm無法爲多個數據庫連接解析列

有沒有辦法看看它在看什麼數據庫?它可以用於多個數據庫嗎?還是我做了其他事情呢?

錯誤如下:

error message

$this->db->setSQL("SELECT T1.*, trunc(sysdate) - trunc(DATE_CHANGED) EXPIRES FROM " . $this->tableName . " T1 WHERE lower(" . $this->primaryKey . ")=lower(:id)") 

而且,這裏是我的數據庫設置窗口看起來就像是看到有導致此錯誤與參數的模式問題,一些人,但我相當肯定不是這裏的問題:

database settings

使用PhpStorm 10.0.3

+1

PhpStorm不知道你的表名,因爲它是動態設置在一個PHP變量中的:'$ this-> tableName' –

+0

好的。有沒有我可以用來告訴它的表名的評論?像使用/ ** @noinspection SqlResolve * /但更聰明一些。表名被設置在課程開始時,它能看不到嗎?你會忽略這個錯誤還是隻使用上面的noinspection註釋? –

+0

在這種情況下你們會做什麼?我來自崇高的文字,這是我的第一個IDE!所以想要學習一個好的系統,並做到「正確」。有沒有我可以添加的評論,如用於動態方法的@method? –

回答

3

所以簡短的回答是它不能將表名作爲變量讀取,即使它在上面的變量中設置。我認爲PhpStorm可以解決這個問題。清除錯誤的唯一方法是要麼完全關閉SQL檢查(顯然不是理想的,因爲我用它在我的項目),或者僅使用文檔註釋暫時禁用此聲明:

/** @noinspection SqlResolve */ 

當時希望找到一個更加有針對性的評論,就像@var或@method,以幫助告訴Phpstorm該表應該是什麼,因此它仍然可以檢查其他語句。例如: /** @var $this->tableName TABLE_IM_USING */ 也許在未來,JetBrains將會添加該功能,或者使PhpStorm足夠聰明,以查看上面的3行變量。

+0

如何關閉SQL檢查? –

0

您可以使用Nowdoc /定界符也代替使用

/** @noinspection SqlResolve */ 

這裏是例子

$name = "your name"; 
$query = <<<SQL 
SELECT * FROM user WHERE name LIKE "%$name%" ORDER BY id 
SQL; 

這兩種方法都會使報警消失

1

您可以設置SQL分辨率範圍在File -> Settings -> Languages & Frameworks -> SQL Resolution Scopes

enter image description here

這使您可以爲整個項目的默認,你也可以定義特定映射到項目中的某些路徑。

+0

Thx!所有數據源都不適合我,但我選擇了模式(在postgresql數據庫中),現在正在工作! –