В чем разница между оригинальным объектом и коллекцией клонированных объектов? - PullRequest
0 голосов
/ 18 января 2019

Существует коллекция доктрин, и я хочу изменить некоторые значения в ней. Это происходит в другом классе и передается на уровень дао, чтобы сохранить его в базе данных. и там есть еще одна строка для извлечения данных из базы данных. из-за этой строки все измененные объекты заменяются.

$doctrineCollection1 = $empSalaryComponents->findBy('employee_number', $empNumber);
foreach ($empSalComCollection1 as $empSalComponent) {
            $empSalComponent->setValue(9999999999999);
        }
$doctrineCollection2 = $empSalaryComponents->findBy('employee_number', $empNumber);

Теперь, если вы напечатаете эти 2 коллекции, вы получите те же результаты.

Чтобы избежать этого, используйте этот подход,

$doctrineCollection1 = $empSalaryComponents->findBy('employee_number', $empNumber);
$employeeSalaryComponents = new Doctrine_Collection('EmployeeSalaryComponent');
 foreach ($doctrineCollection1 as $object) {
    $object = clone $object;
    $object->setValue(9999999999999);
    $employeeSalaryComponents->add($object);
 }
$doctrineCollection2 = $empSalaryComponents->findBy('employee_number', $empNumber);

теперь $ doctrineCollection1 и $ employeeSalaryComponents - это разница. Кто-нибудь может объяснить причину этого?

...