每个订单都有字段'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_str
和from_bld null
,但from_company_id = "1"
id = 1的公司名称为“Sun,Inc。”
因此,对于Order1的“来自”字段,我想要“Baker st 221B”,
对于Order2的“从”字段,我想得到“Sun,Inc。”
模型或控制器代码的实现方式是什么?
答案 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”键。
如果将数据合并到同一个密钥是一个重要的要求,请描述您的要求,然后我可能会进一步帮助您