php – 当你不知道它的父对象是否存在时,如何保存对象?
发布时间:2020-12-13 16:46:11 所属栏目:PHP教程 来源:网络整理
导读:我有三张桌子, Business: id nameOffice: id name business_idEmployee: id name office_id 员工将office_id作为外键,办公室将business_id作为外键. 我有一个与每个相关的域对象/实体和与每个相关的数据库映射器对象. 现在,当我由公司名称,办公室名称和员工
我有三张桌子,
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样式结构,所以无论您的框架偏好如何,请随时回复:) 解决方法
如果在if()块期间使用OR语句并将查询放在if语句中,那么只有在IF语句的第一部分失败时才会执行它 – 确保您不会不必要地执行查询.我们个人做了类似的事情,但是当我们创建一个新的域时,我们在域new = 1中设置了一个标志,我们检查这个,相同的方法只是删除了对这些脏变量的需要;-)
$businessMapper = Factory::getMapper('business'); if (!$business = $businessMapper->findByName("Business Name")) { $business = $businessMapper->create(); $business->setName("Business Name"); $businessMapper->save($business); $newBusiness = true; } $officeMapper = Factory::getMapper('office'); if (isset($newBusiness) || !$office = $officeMapper->findByName("Office Name")) { $office = $officeMapper->create(); $office->setName("Office Name"); $office->setBusiness($business->getId()); $officeMapper->save($office); $newOffice = true; } $employeeMapper = Factory::getMapper('employee'); if (isset($newOffice) || !$employee = $employeeMapper->findByName("Employee")) { $employee = $employeeMapper->create(); $employee->setName("Employee Name"); $employee->setOffice($office->getId()); $employeeMapper->save($employee); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |