2016-12-23 5 views
1

У меня есть фрагмент кода, который выполняет итерацию по всем связанным записям профиля (HAS_MANY) записи команды.Освобождение связанных записей для освобождения памяти в Yii1

Это выглядит следующим образом:

$team = Team::model()->findByPk(1); 
$score = 0; 

foreach ($team->profiles as $profile) { 
    $score += $profile->getScore(); 
} 

Теперь мне нужно, чтобы сохранить переменную $team, но из цикла все профили будут храниться в profiles собственности, и использовать тонну памяти.

Есть ли способ безопасно очистить это? Я думал об установке profiles в null, но потом, очевидно, остается нулевым (и я не знаю, если другой кусок кода необходимо получить доступ к profiles позже)

+0

Итак, вы хотите сохранить переменную '$ team' и в то же время вы этого не сделаете, потому что она использует много памяти? Если это так, я бы отключил их один за другим и просто получил их из базы данных, если они вам понадобятся. Или сохраните их в каком-то временном файле. Не думайте, что есть другой способ, на мой взгляд. –

+0

Нет, нет. Мне нужно сохранить переменную '$ team', но мне, вероятно, не нужно сохранять свойство' profiles'. По крайней мере, не для каждой записи '$ team', которая будет использоваться. – skerit

ответ

0

Как я уже сказал, мне кажется, вы хотите сохранить $team переменной и в то же время вы не делаете, потому что она использует много памяти ...

В этом случае я бы сбросить их один за другим:

for ($i=0;for ($i=0, $j = count($team->profiles); $i < $j ; ++$i){ 
    $score += $team->profiles[$i]->getScore(); 
    unset($team->profiles[$i]); 
} 

// OR 

foreach ($team->profiles as $key => $profile) { 
    $score += $profile->getScore(); 
    unset($team->profiles[$key]); 
} 

и просто получить их из база данных снова, если они вам понадобятся. Или сохраните их в каком-то временном файле. Не думайте, что есть другой способ, на мой взгляд.