DBICでネストしたループ

そういえばとあるところで質問を受けたので。
その質問を補う形で。

DBICを使った場合でも普通にネストしたループは使えるわけですが、
TTの場合。


[% WHILE (blogger = blogger_ite.next) %]
[% FOR entry IN blogger.entries %]
URL:[% entry.url %]

[% END %]
[% END %]

こんな感じです。
くるくる回ってくれます。
普通にPerlの処理でもこんな幹事


my $blogger_ite = $self->model('Blogger')->search;
while (my $blogger = $blogger_ite->next) {
for my $entry ( $blogger->entries ) {
print $entry->url,"\n";
}
}

こんな荒業もできます。↓(荒業じゃないけど)


while (my $blogger = $blogger_ite->next) {
for my $entry ( $blogger->entries->search({},{rows => 1})->all ) {
print $entry->url,"\n";
}
}

ちなみにこれは↓無限ループになるので危険です。死ねます。


while (my $blogger = $blogger_ite->next) {
while (my $entry = $blogger->entries->search({},{rows => 1})->next ) {
print $entry->url,"\n";
}
}

確かに$blogger->entriesから普通にsearchをチェーンさせることはできるのですが、
あんましうまみは無いかなぁ。普通ならprefetchしたいところだし。

まあ、やるんであれば、


while (my $blogger = $blogger_ite->next) {
my $entry_ite = $blogger->entries->search({},{rows => 1,page => 1});
while (my $entry = $entry_ite->next) {
print $entry->url,"\n";
}
}

こうかな。
やんないけど。

TTだとネストした側のWHILEがうまくいかんのお。
なんでじゃろ。
でも、prefetchつかうならFORでいい気もするから別にいいのだけれども。