2

1.3 CakePHPアプリを2.2.5にアップグレードする過程で、で予期しない結果が発生しfind('list')ます。

idデータベースに格納されている増分値の1、2、3、4、5ではなく、値に1を取得する理由を誰かが知っていますか?

コントローラコード(以下に表示)を実行すると、次のようになります。

Array
(
     [1] => 5
)

私が取得したいのは:

Array
(
     [1] => 1 (urgent)
     [2] => 2
     [3] => 3
     [4] => 4
     [5] => 5

)

そして、に変更するとfind('all')、次のようになります。*値は常に1であることに注意してください[id]*

Array
(
[0] => Array
    (
        [Priority] => Array
            (
                [id] => 1
                [description] => 1 (urgent)
            )

    )

[1] => Array
    (
        [Priority] => Array
            (
                [id] => 1
                [description] => 2
            )

    )

[2] => Array
    (
        [Priority] => Array
            (
                [id] => 1
                [description] => 3
            )

    )

[3] => Array
    (
        [Priority] => Array
            (
                [id] => 1
                [description] => 4
            )

    )

[4] => Array
    (
        [Priority] => Array
            (
                [id] => 1
                [description] => 5
            )

    )

)。

すでに試しました

  • PriorityがCakePHPで予約語だった場合に備えて、Priorityの名前をPriorityLevelに変更します。

以下の関連コードを参照してください。

コントローラコード

$priorities = $this->Ticket->Priority->find('list', array('fields' => array('Priority.id', 'Priority.description'),'order' => 'Priority.description'));

モデルコード

class Ticket extends AppModel {
public $name = 'Ticket';
public $belongsTo = array('Affect', 'Priority', 'User', 'Status');
public $validate = array(
    'priority_id' => array(
        'rule' => 'notEmpty',
        'message' => 'Please assign a priority to this ticket'
    )
);
}

class Priority extends AppModel {
public $name = 'Priority';
}

コードを表示

echo $this->Form->input('Ticket.priority_id', 
                            array('type' => 'select',
                            'empty' => true,
                            'tabindex' => 2));
4

2 に答える 2

0

回答:テーブルのidフィールドのデータ型をからに変更してください。prioritiestinyint(1)tinyint(2)

説明: CakePHPはtinyint(1)ブール値として解釈されるようです。ただし、優先順位リストが1から5になることはわかっていたので、これを使用していました。

于 2013-01-23T09:15:50.610 に答える
0

Priorityに多くのチケットがある場合は、Priority.phpモデルから始めて、以下を追加する必要があります。

public $hasMany = array(
    'Tickets' => array(
        'className' => 'Ticket',
        'foreignKey' => 'priority_id',
            )
);

その場合、Ticket.phpモデルクラスは正常に見えますが、次のように記述します。

public $belongsTo = array(
    'Priority' => array(
        'className' => 'Priority',
        'foreignKey' => 'priority_id',
    )
);

TicketsDbのテーブルにpriority_id、正しい関係が設定されるようにという名前の列があることを確認する必要があります。

次に、Ticket Controllerで、次のようなものが簡単に機能するはずです。

$priorities = $this->Ticket->Priority->find('list');

これが機能しない場合、モデルクラスとコントローラーの両方をzip形式で圧縮して私に送信したい場合は、喜んで見ていきます。物事を簡単にするために、優先順位テーブルとチケットテーブルの両方の構造に沿って送信できます。

于 2013-01-22T16:12:51.210 に答える