0

我的数据库中有一个名为商家的表,在该表中我有一个名为 Mercer_code 的字段,我想为我的字段生成一个 8 代码,这样前两个字符包含来自各州的 state_name 的前两个字母表和接下来的两个字符包含我的 city_name 来自城市表的前两个字母,最后四个字符应包含从 ooo1 开始的数字。在添加商家时,我希望此代码自动添加,并保存在我的数据库中我是 cakehp 的初学者,所以请简要回答我,如果我找到解决方案将不胜感激

4

1 回答 1

2

Merchant 模型可能与 City 模型(如 belongsTo)相关联,而 City 模型又与 State 模型(belongsTo 也是)相关联。您可以为 Merchant 模型创建 afterSave 回调并检查参数 $created。如果是真的,只需从相关模型中获取 2 条记录并编写您的商家代码。像这样:(考虑到您对 City 模型使用 Containable 行为):

public function afterSave($created) {
    parent::afterSave($created);
    if ($created) {
        $this->City->contain('State');
        $names = $this->City->find('first', array(
            'conditions' => array(
                'City.id' => $this->data['Merchant']['city_id']
            ),
            'fields' => array(
                'City.city_name',
                'State.state_name',
            )
        ));

        if (!empty($names)) {
            $merchant_code = substr($names['State']['state_name'], 0, 2)
                . substr($names['City']['city_name'], 0, 2)
                . sprintf('%1$04d', $this->getLastInsertID());
            $this->saveField('merchant_code', $merchant_code);
        }
    }
}
于 2012-10-16T18:00:50.313 回答