在Symfony2中,我有两个实体(Companies
和Employees
),具有一对多关系(一个公司可以有多个员工)。
每个Employee对象都有id
,company_id
(外键),badge_number
,last_updated
日期时间字段,name
等
简单,对吧? 现在是棘手的部分......
每天我(从API)获得一个$company_upd
数组,其中包含更新部分员工数据的所有公司的列表。然后,对于$company_upd
中的每个公司,我从API检索一个$company_employees_list
数组,该数组包含新的员工列表。
然后我遍历数组以识别需要在我的本地数据库中持久化的任何新/更新记录。像这样:
foreach ($company_employees_list as $employee){
$local_employee = $repo->findOneBy("badge_number" => $employee["badge_number"];
//if there is already an employee record with the same badge_number
if($local_employee){
//compare the last_updated field to see if this employee record needs to be updated
if($employee["badge_number"] > $local_employee->getLastUpdated()){
//update the record and persist to the database
$local_employee->setSomething($employee["some_value"];
}
} else {
//create a new employee object and persist it to the database
$new_employee = new Employee();
$new_employee->setSomething('some_value');
$em->persist($new_employee);
}
}
$em->flush();
当然,这种方法运行正常,但我正在对员工foreach公司进行查询! (检索相应的对象并更新它)
使用ArrayCollection是否可能(并且会更好)?我的意思是:获取员工ArrayCollection ONE TIME,然后使用它。搜索是否已存在具有特定badge_number的员工记录,并最终更新并将其保留到数据库中? 所以,基本上,我想在上面的代码中做我所做的一切,但使用Array_Collection而不是单独的查询。 但只有这种新方法更快/更好。
如果它确实可能(并且更快),你能不能写一些模型代码来更好地理解如何操作ArrayCollection并做我想做的事情?
//Fetch the local db employees ArrayCollection
$employees_ar_coll = $company->getEmployees();
//What now???? =)
P.S。 API就像这样工作,无法改变它。