CakePHP:虚拟字段的可变源

时间:2013-03-23 07:46:58

标签: php cakephp cakephp-appmodel

每个订单都有字段'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”字段中显示Company的名称。

例如:

订单1有from_str = "Baker st"from_bld = "221B"from_company_id = "0"
Order2有from_strfrom_bld null,但from_company_id = "1"

id = 1的公司名称为“Sun,Inc。”

因此,对于Order1的“来自”字段,我想要“Baker st 221B”,
对于Order2的“从”字段,我想得到“Sun,Inc。”

模型或控制器代码的实现方式是什么?

1 个答案:

答案 0 :(得分:1)

您需要在两个模型之间创建关系。由于您没有根据CakePHP约定(即company_id)命名外键,因此您必须自己指定。

应用程序/型号/ Order.php

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

应用程序/型号/ 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”键。

如果将数据合并到同一个密钥是一个重要的要求,请描述您的要求,然后我可能会进一步帮助您