Почему сбрасывается значение объекта? Есть сл. код:$adverts = DB::select('id', 'rate') ->from(ORM::factory('Advert')->table_name()) ->as_object('Advert')->execute(); foreach ($adverts as $advert){ $advert->rate = rand(0,10); var_dump($advert->rate); } foreach ($adverts as $advert) var_dump($advert->rate); В результате:float(5) NULL Почему так? Т.е. почему теряется значение $advert->rate ?
В данном коде значение объекта $advert->rate сбрасывается после первого цикла foreach из-за того, что используется метод execute() после вызова DB::select().
Метод execute() выполняет запрос к базе данных и возвращает результат в виде массива объектов. После этого уже происходит проход по каждому объекту в цикле foreach.
После выполнения первого цикла, при попытке пройти по объектам второй раз, уже выполнен запрос к базе данных и значения объектов $adverts уже не содержат изменений, внесенных в первом цикле.
Для того, чтобы сохранить изменения в объекте $advert между циклами, рекомендуется сохранить все значения после первого цикла в отдельный массив или коллекцию и использовать их уже во втором цикле.
В данном коде значение объекта $advert->rate сбрасывается после первого цикла foreach из-за того, что используется метод execute() после вызова DB::select().
Метод execute() выполняет запрос к базе данных и возвращает результат в виде массива объектов. После этого уже происходит проход по каждому объекту в цикле foreach.
После выполнения первого цикла, при попытке пройти по объектам второй раз, уже выполнен запрос к базе данных и значения объектов $adverts уже не содержат изменений, внесенных в первом цикле.
Для того, чтобы сохранить изменения в объекте $advert между циклами, рекомендуется сохранить все значения после первого цикла в отдельный массив или коллекцию и использовать их уже во втором цикле.