2016-12-23 19 views
1

チームレコードのすべての関連するプロファイルレコード(HAS_MANY)を繰り返し処理するコードがあります。それはこのようになります関連レコードを解放してYii1のメモリを解放する

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

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

今私は$team変数を維持する必要がありますが、理由はループのすべてのプロファイルはprofilesプロパティに保持され、メモリのトンを使用します。

これを安全にクリーニングする方法はありますか? あなたが残しておきたい私には思える、私はnullprofilesの設定について思ったが、それは明らかにヌルのまま(とコードの別の部分が上後でprofilesにアクセスする必要がある場合、私は知らない)私が言ったように

+0

あなたは '$ team'変数を保持したいと同時に、たくさんのメモリを使用するので、あなたはそうしないでください。その場合、私はそれらを1つずつ解除し、必要に応じてデータベースから再度取得します。または、何らかの種類の一時ファイルに格納します。私の意見では別の方法があるとは思わない。 –

+0

いいえ、いいえ。私は '$ team'変数を保持する必要がありますが、おそらく' profiles'プロパティを保持する必要はありません。少なくとも、使用されるすべての '$ team'レコードに対してではありません。 – skerit

答えて

0

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]); 
} 

そして、ちょうどからそれらを得る:私はそれらを一つ一つの設定を解除するだろうその場合$team変数と、それは大量のメモリを使用していますので、あなたが、ない同時に...

必要に応じてデータベースを再作成します。または、何らかの種類の一時ファイルに格納します。私の意見では別の方法があるとは思わない。