2014-06-17 146 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是字段值。 –

相關問題