选择没有`e。或`main_table`的字段 - Magento

时间:2012-01-23 00:25:07

标签: php mysql magento select

这个问题来自我在这个论坛上的其他一个问题。我创建了一个自定义模块并覆盖了'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相关的帖子,但不确定这是否是我个案中的选项之一。提前谢谢。

5 个答案:

答案 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`.emailemail选择(并过滤)。

答案 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的方式,请告诉我。

感谢你们每个人的帮助。