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作为字段。
答案 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
)
);