2014-06-17 99 views
0

我需要在使用tablegateway的模型中编写更新查询。更新查询sql如下。Zend Framewrok 2:如何使用tablegateway编写自定义查询

UPDATE `config_settings` SET `CS_value` = CASE `CS_option` 
    WHEN 'CATEGORY_BANNER_MIN_WIDTH' THEN '$data->CATEGORY_BANNER_MIN_WIDTH' 
    WHEN 'CATEGORY_BANNER_MAX_WIDTH' THEN '$data->CATEGORY_BANNER_MAX_WIDTH' 
    WHEN 'CATEGORY_PROMOTION_MIN_WIDTH' THEN '$data->CATEGORY_PROMOTION_MIN_WIDTH' 
    WHEN 'CATEGORY_PROMOTION_MAX_WIDTH' THEN '$data->CATEGORY_PROMOTION_MAX_WIDTH' 
    WHEN 'PRODUCT_LARGE_IMAGE_WIDTH' THEN '$data->PRODUCT_LARGE_IMAGE_WIDTH' 
    WHEN 'PRODUCT_MEDIUM_IMAGE_WIDTH' THEN '$data->PRODUCT_MEDIUM_IMAGE_WIDTH' 
    WHEN 'PRODUCT_SMALL_IMAGE_WIDTH' THEN '$data->PRODUCT_SMALL_IMAGE_WIDTH' 
    ELSE `CS_value` 
END; 

我不知道如何实现这一点。 tablegateway的更新方法只取表格字段名称及其值。那么如何编写这个查询。

我知道我可以执行此查询使用db适配器原始sql查询,但我不想这样。除此之外,有时我们需要在tablegateway的select方法中进行一些自定义查询。但是我发现在tablegateway没有稳定的方式。

例如:

select sum(CASE WHEN answers.type = 'his' THEN 1 ELSE 3 END) AS totalScore 
FROM users_questions_answers join answers on cast(answers.id as int(8))= 
users_questions_answers.answer_id group by users_questions_answers.user_id 

我怎么能继续在这种情况下。任何zend 2专家的建议将高度赞赏。 感谢您的关心。

回答

0

试试这个 -

$this->tablegateway->update(array('CS_value' => new \Zend\Db\Sql\Expression('CASE CS_option 
    WHEN "CATEGORY_BANNER_MIN_WIDTH" THEN ? 
    WHEN "CATEGORY_BANNER_MAX_WIDTH" THEN ? 
    WHEN "CATEGORY_PROMOTION_MIN_WIDTH" THEN ? 
    WHEN "CATEGORY_PROMOTION_MAX_WIDTH" THEN ? 
    WHEN "PRODUCT_LARGE_IMAGE_WIDTH" THEN ? 
    WHEN "PRODUCT_MEDIUM_IMAGE_WIDTH" THEN ? 
    WHEN "PRODUCT_SMALL_IMAGE_WIDTH" THEN ? 
    ELSE CS_value END', 
    array($data->CATEGORY_BANNER_MIN_WIDTH, $data->CATEGORY_BANNER_MAX_WIDTH, $data->CATEGORY_PROMOTION_MIN_WIDTH, $data->CATEGORY_PROMOTION_MAX_WIDTH, $data->PRODUCT_LARGE_IMAGE_WIDTH, $data->PRODUCT_MEDIUM_IMAGE_WIDTH, $data->PRODUCT_SMALL_IMAGE_WIDTH)))); 

如果CATEGORY_BANNER_MIN_WIDTH就像在查询中使用的一些常量则只是删除double quotes周围。

我已经尝试了类似的查询以上的一个,它工作得很好。

+0

您提到的方式不起作用 –

+0

我已经更新了上述答案,请再次阅读。 –

+0

试过没有双引号。但给以下错误。 '字段列表中的未知列'CATEGORY_BANNER_MIN_WIDTH'。这意味着更新查询指示CATEGORY_BANNER_MIN_WIDTH作为表字段。对于您的信息,CATEGORY_BANNER_MIN_WIDTH是字段值。 –

相关问题