0

Cakephp は、ポストグレス関数を実行するフィールドに引用符を追加しています。$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 に答える