Cakephp正在为我的查询添加引号。如何解决这个问题?

时间:2013-08-07 12:31:10

标签: postgresql cakephp

Cakephp正在我的领域添加引号,我在那里做一些postgress功能。我使用$this->paginate其中fields数组如下所示:

'fields' => array(  'DealRegistration.id',
'DealRegistration.company_name',
'RequestSpecialPrice.total_price',
'RequestSpecialPrice.request_price',
'RequestSpecialPrice.created',
'RequestSpecialPrice.partner_status',
'RequestSpecialPrice.status',
'RequestSpecialPrice.discount',
"**concat('SP',lpad(CAST(RequestSpecialPrice.deal_registration_id as TEXT),8,'0'))**",
)

cake生成的查询如下所示:

SELECT concat('SP',lpad(CAST("RequestSpecialPrice"."deal_registration_id" AS **"TEXT"**),8,'0')) FROM table

如果我从“TEXT”中删除引号,则查询有效:

SELECT concat('SP',lpad(CAST("RequestSpecialPrice"."deal_registration_id" as **TEXT**),8,'0'))) FROM table

如何强制cakephp不添加这些引号?

L.E。 解决方案是使用cake的虚拟字段。

我已宣布:

“concat('SP',lpad(CAST(”RequestSpecialPrice“。”deal_registration_id“AS ”TEXT“),8,'0'))aaa”

作为模型中的虚拟字段,只选择aaa作为字段。

1 个答案:

答案 0 :(得分:1)

使用像这样的本机SQL函数时,通常最好创建一个虚拟字段。

http://book.cakephp.org/2.0/en/models/virtual-fields.html

应用/型号/ RequestSpecialPrice.php

public $virtualFields = array(
    'my_virtual_field' => "CONCAT('SP', LPAD(CAST(RequestSpecialPrice.deal_registration_id as TEXT), 8, '0'))"
);

<强>用法

$this->RequestSpecialPrice->find('first', array(
    'fields' => array(
        'DealRegistration.id',
        'DealRegistration.company_name',
        'RequestSpecialPrice.total_price',
        'RequestSpecialPrice.request_price',
        'RequestSpecialPrice.created',
        'RequestSpecialPrice.partner_status',
        'RequestSpecialPrice.status',
        'RequestSpecialPrice.discount',
        'RequestSpecialPrice.my_virtual_field' // Use virtual field
    )
);