2012-01-23 62 views
0

這個問題出自我在這個論壇上的其他問題之一。我創建了一個自定義模塊並覆蓋了「Review」模型的核心文件。它允許我將數據保存到我的自定義字段'電子郵件'罰款。但是,當我嘗試檢索該字段的值時,它根本無法識別我的字段。選擇一個沒有`e.`或`main_table`的字段 - Magento

這是我的查詢,

Mage::getModel('review/review')->getCollection() 
->addFieldToFilter('status_id' , '1') 
->addFieldToFilter('email', $emailId) 
->addFieldToSelect('email'); 

這是我所得到的,當我贊同它,

SELECT `main_table`.`email` AS `review_detail`, `detail`.`detail_id`, `detail`.`title`, `detail`.`detail`, `detail`.`nickname`, `detail`.`customer_id` FROM `review` AS `main_table` INNER JOIN `review_detail` AS `detail` ON main_table.review_id = detail.review_id WHERE (status_id = '1') AND (email = '[email protected]') 

它顯然試圖從main_table選擇電子郵件這是review表而不是review_detail表。有沒有辦法選擇email字段沒有main_table前綴或只是改變查詢,使它從review_detail表中選擇email

請幫我一把。我遇到過與joins相關的帖子,但不確定這是否是我的案例中的一個選項。提前致謝。

回答

0

那麼快速的方式來獲得,現在運行的是,我已經直接傳遞一個SQL在代碼中查詢。我知道這不是正確的做法,但我嘗試過的任何事情肯定無濟於事。這是我的代碼:

$resource = Mage::getSingleton('core/resource'); 
    $readConnection = $resource->getConnection('core_read'); 
    $query = "SELECT a.review_id, b.email FROM review AS a INNER JOIN review_detail AS b WHERE a.review_id = b.review_id AND a.status_id = 1 AND b.email = '" . $emailId. "'"; 
    $results = $readConnection->fetchAll($query); 

我知道這是不是寫Magento的代碼以正確的方式,但得到它快速的工作,我沒有其他選擇。我會繼續尋找一個合適的解決方案,一旦得到它就會修改它。如果其他人能想到寫這個同樣的東西,但Magento的方式,請讓我知道。

感謝您的幫助到目前爲止每一個。

0

由於您沒有在addFieldToSelect方法中指定的表別名email領域,系統就默認爲main_table.email

如果你看一下查詢,它加入到review_detail用表的別名的detail

INNER JOIN `review_detail` AS `detail` 

您應該能夠選擇(和過濾器)的emailreview_detail表指定,而不是僅僅email`detail`.email

+0

我確實嘗試過,但仍未發生。你如何在上面的代碼中使用'detail.email'編寫代碼?也許我在語法上寫錯了? – ivn

+0

我用'(反引號)。當你用'detail.email'進行回顯時,你會得到什麼? – CCBlackburn

+0

當我回顯'detail'.'email'時,我得到'SELECT'main_table.'detailemail' ...'..它只是不能識別'email'字段來自review_detail而不是審查表。 – ivn

0

其實你沒有使用表別名這就是爲什麼,你正在從主表中獲取電子郵件。 您將使用「細節」 .email =「[email protected]

+0

我應該寫什麼,以便使用'detail'作爲表別名,而選擇我的電子郵件字段在'addFieldToSelect'行? – ivn

0

試試這個方法:

Mage::getModel('review/review')->getCollection() 
    ->addFieldToFilter('status_id' , '1') 
    ->addFilter('my_cool_filter', 
     $this->getConnection()->quoteInto('detail.email=?', $emailId), 
     'string' 
    ); 
+0

我試圖通過附加一個getSelect()來回應這個查詢,但它的dint返回任何東西。似乎查詢沒有形成? – ivn

+0

不知道。是'$ this-> getConnection()'存在並且是複製粘貼這個代碼的地方的正確類的對象嗎? – Zyava

+0

嗯,我試着回顯'$ this-> getConnection()',但它也打印出任何東西。我想我需要做$ resource-> getConnection()'也許在哪裏'$ resource = Mage :: getSingleton('core/resource');'? – ivn

0

我知道這個問題是舊的,但我只是有相同的,所以你的人在未來,你這是怎麼做到這一點的最簡單的方法,不使用普通的SQL:

Mage::getModel('review/review') 
->getCollection() 
->addExpressionFieldToSelect('email','detail.email'); 

它成爲:detail.email AS email

相關問題