0

各注文には、フィールド「from_str」と「from_bldg」があります。Orderモデルでは、これらのフィールドを連結する仮想フィールド「from」を作成しました。

public $virtualFields = array(
   'from' => 'CONCAT(Order.from_str, " ", Order.from_bldg)'
);

ただし、Orderには会社へのリンクもあります。したがって、フィールドfrom_company_idが0 / nullでない場合は、Orderの「from」フィールド内に会社名を表示したいと思います。

例えば:

Order1には、、、 Order2にfrom_str = "Baker st"はと がfrom_bld = "221B"ありますが、from_company_id = "0"
from_strfrom_bld nullfrom_company_id = "1"

id = 1の会社の名前は、「Sun、Inc。」です。

したがって、Order1の「from」フィールドには「Bakerst 221B」
を、Order2の「from」フィールドには「Sun、Inc。」を取得したいと思います。

これを実現するために、モデルまたはコントローラーのコードはどのようになりますか?

4

1 に答える 1

1

両方のモデル間に関係を作成する必要があります。CakePHPの規則(つまり)に従って外部キーに名前を付けなかったためcompany_id、自分で指定する必要があります。

app / Model / Order.php

class Order extends AppModel {
    public $belongsTo = array(
        'Company' => array(
            'foreignKey' => 'from_company_id',
        )
    );
}

app / Model / Company.php

class Company extends AppModel {
    public $hasMany = array(
        'Order' => array(
            'foreignKey' => 'from_company_id',
        )
    );
}

そして、コントローラーの内部。

$order = $this->Order->find('first, array(
    'conditions' => array(
       'Order.id' => $id,  // or whatever name the ID has
    ),
    'recursive' => 1,
));

debug($order);

これにより、注文 「会社」の両方の詳細が表示されます。ただし会社$orderの詳細は、配列内の別の「キー」(「会社」)にあります。これがビューに順序を出力するためだけのものである場合、virtualFieldを使用してデータを配列内の「Order」キーにマージする理由はわかりません。

データを同じキーにマージすることが重要な要件である場合は、要件を説明してください。さらにサポートさせていただきます

于 2013-03-23T12:56:01.650 に答える