0

Cakephp 在我的字段中添加引号,我在其中执行一些 postgress 函数。我使用$this->paginate字段数组如下所示的位置:

'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 不添加这些引号?

LE 解决方案是使用 cake 的虚拟字段。

我已经宣布:

"concat('SP',lpad(CAST("RequestSpecialPrice"."deal_registration_id" AS "TEXT" ),8,'0')) as aaa"

作为模型中的虚拟字段,并且刚刚选择 aaa 作为字段。

4

1 回答 1

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
    )
);
于 2013-08-07T15:27:41.073 回答