这个问题来自我在这个论坛上的其他一个问题。我创建了一个自定义模块并覆盖了'Review'模型的核心文件。它允许我将数据保存到我的自定义字段'email'。但是当我尝试检索此字段的值时,它根本无法识别我的字段。
这是我的查询,
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 = 'test@test.com')
它显然试图从main_table
选择电子邮件,即review
表而不是review_detail
表。有没有办法选择没有email
前缀的main_table
字段,或者只是更改查询,以便从email
表中选择review_detail
?
请帮帮我。我遇到了与joins
相关的帖子,但不确定这是否是我个案中的选项之一。提前谢谢。
答案 0 :(得分:1)
我知道这个问题已经过时了,但我也有同样的情况,所以对于你们所有人来说,这就是你最简单的方法,不使用普通的sql:
Mage::getModel('review/review')
->getCollection()
->addExpressionFieldToSelect('email','detail.email');
变为:detail.email AS email
答案 1 :(得分:0)
由于您未在email
方法中为addFieldToSelect
字段指定表别名,系统会将其默认为main_table.email
如果您查看了该查询,则会使用表格别名review_detail
加入detail
。
INNER JOIN `review_detail` AS `detail`
您应该可以通过指定email
而非review_detail
来`detail`.email
从email
选择(并过滤)。
答案 2 :(得分:0)
实际上你没有使用表别名这就是为什么,你从主表收到电子邮件。 您将使用'detail'.email ='test@test.com'
答案 3 :(得分:0)
尝试这种方式:
Mage::getModel('review/review')->getCollection()
->addFieldToFilter('status_id' , '1')
->addFilter('my_cool_filter',
$this->getConnection()->quoteInto('detail.email=?', $emailId),
'string'
);
答案 4 :(得分: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的方式,请告诉我。
感谢你们每个人的帮助。