我的数据库中有一个名为商家的表,在该表中我有一个名为merchant_code的字段,我想为我的字段生成一个8代码,前两个字符包含我的前两个字母来自states表的state_name和接下来的两个字符包含来自cities表的city_name中的前两个字母,后四个字符应包含从ooo1开始的数字。 在添加商家时,我希望此代码自动添加,并保存在我的数据库中 我是cakehp的初学者,所以请简单回答一下,如果我找到解决方案会很感激
答案 0 :(得分:2)
商家模型可能与City模型(作为belongsTo)相关联,而City模型又与State模型相关联(belongsTo也是如此)。您可以为Merchant模型创建一个afterSave回调,并检查参数$ created。如果是真的,只需从关联模型中获取2条记录并组成您的merchant_code。这样的事情:(考虑到你对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);
}
}
}