0

每个订单都有字段“from_str”和“from_bldg”。在订单模型中,我创建了连接这些字段的虚拟字段“来自”:

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

但是,Order 也有指向公司的链接。因此,如果 from_company_id 字段不为 0/null,我想在 Order 的“from”字段中显示公司名称。

例如:

Order1 有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.”。

模型或控制器的代码会是什么样子来实现这一点?

4

1 回答 1

1

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

应用程序/模型/Order.php

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

应用程序/模型/公司.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);

这应该为您提供订单 公司”详细信息。但是公司的详细信息会在一个单独的'key'('Company')$order数组里面。如果这只是为了在您的视图中输出订单,我认为没有理由使用 virtualField 将数据合并到数组内的“订单”键。

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

于 2013-03-23T12:56:01.650 回答