我有三张桌子,
Business:
id
name
Office:
id
name
business_id
Employee:
id
name
office_id
员工的 office_id 作为外键,办公室的 business_id 作为外键。
我有一个与每个相关的域对象/实体和一个与每个相关的数据库映射器对象。
现在,当我提供公司名称、办公室名称和员工姓名时,如何插入新员工?
最初我认为逻辑应该是这样的:
$businessMapper = new businessMapper();
$business = $businessMapper->findBusinessByName($business_name);
if ($business == false) {
$business = new businessEntity(array(
'businessName' => $business_name,
));
$businessMapper->save($business);
}
$officeMapper = new officeMapper();
$office = $officeMapper->getOfficeByName($office_name, $business);
.......etc.......
但后来我意识到,如果我必须保存一项新业务,我就不可能拥有办公室或员工,因此尝试获取它们是一种浪费的查询。所以我想我应该创建一个 if/else 结构。
get business entity by business_name
if ($business == false) {
create business entity
save business entity
create office entity
save office entity
create employee entity
save employee entity
} else {
get office entity by office_name + business_id
if (office == false) {
create office entity
save office entity
create employee entity
save employee entity
} else {
......etc......
}
}
但是有太多重复的逻辑,而且非常不可扩展/肮脏。
那么应该如何实现呢?
其次,逻辑应该去哪里?它应该进入员工的映射器吗?或“添加员工”操作的控制器还是应该有一个新模型?
我使用 Zend 作为我的框架,但我认为这个问题适用于所有 MVC 风格的结构,所以无论您的框架偏好如何,请随时回复 :)