2009-01-15 5 views
10

एक DBIx :: कक्षा resultset, उदाहरण के लिए दिया गया है:टेम्पलेट टूलकिट का उपयोग करने वाले मेरे उत्प्रेरक प्रोजेक्ट में डीबीआईएक्स :: कक्षा परिणामसेट को प्रदर्शित करने का सही तरीका क्या है?

my $rs = $c->model("DB::Card")->search({family_name => "Smith"}); 

ट्यूटोरियल मैं गुप्त कोष का उपयोग पंक्तियों की arrayref पारित करने के लिए पढ़ा है:

$c->stash->{cards} = [$rs->all]; 

इस क्वेरी में जो परिणाम निष्पादित हो रही इस बिंदु पर, और जिसके परिणामस्वरूप वस्तुओं गुप्त कोष में भरा है, इसलिए वे के रूप में TemplateToolkit में इस्तेमाल किया जा सकता है:

[% FOREACH card IN cards %] 
    [% card.given_name %] [% card.family_name %] 
[%END%] 

वहाँ टीटी पुनरावृति करने के लिए एक उचित तरीका है पंक्तियों पर वे डीबी से प्राप्त होते हैं?

उत्तर

19

निश्चित रूप से। आप परिणाम सेट सीधे टीटी पर पास कर सकते हैं और टेम्पलेट में इसे फिर से चालू कर सकते हैं।

$c->stash->{cards} = $rs; 

... और फिर:

[% WHILE (card = cards.next) %] 
    [% card.given_name %] [% card.family_name %] 
[% END %] 
5

या, और भी बेहतर:

$c->stash(cards => $rs); 

... टीटी टेम्पलेट में:

[% FOREACH card = cards %] 
    [% card.given_name %] [% card.family_name %] 
[% END %] 
+2

क्या यह काम करता है? - FOREACH एक सरणी लेता है, एक रिकॉर्डसेट नहीं, नहीं? – Thelema

+0

मैं बहुत संघर्ष कर रहा था लेकिन [% FOREACH foo इन foos%] का उपयोग कर रहा था, लेकिन मुझे लगता है कि [% FOREACH foo = foos%] ठीक काम करता है;) – nicomen

2

मुझे क्या करना:

@{$c->stash->{cards}} = $rs->all; 

टेम्पलेट में:

[% FOREACH card IN cards %] 
    [% card.given_name %] [% card.family_name %] 
[% END %] 
+0

स्मृति एक बड़े परिणाम के साथ भूख लगी है। – singingfish

+0

हां, यह उदाहरण कोड के रूप में दिया गया है, लेकिन यह बहुत ही कुशल नहीं है – Thelema

2

मैं लेखक के रूप में बिल्कुल वही बात कर रहा था।

अधिक सख्त एमवीसी दृष्टिकोण बनाने की कोशिश में, अब मैं नियंत्रक में डीबीआईसी वस्तुओं को संसाधित कर रहा हूं और टेम्पलेट को प्रदर्शित करने के लिए एक बहुत ही सरल छलांग लगा रहा हूं। (केवल वेब इंटरफ़ेस की बजाय अन्य स्क्रिप्ट द्वारा कोड को पुन: प्रयोज्य किया जा सकता है।)

अगर कोई जानता है कि यह अधिक कुशल है या नहीं, प्रसंस्करण या स्मृति-वार है तो मुझे उत्सुकता है। मुझे लगता है कि पहली विधि कम प्रोसेसिंग समय में परिणाम देती है लेकिन स्मृति पर अधिक समय तक रखती है। मुझे लगता है कि मेरा नया दृष्टिकोण थोड़ी अधिक प्रसंस्करण और थोड़ी अधिक मेमोरी अस्थायी रूप से लेता है, लेकिन संभावित रूप से बड़े परिणाम सेट ऑब्जेक्ट लंबे समय तक नहीं रहता है।

संबंधित मुद्दे

 संबंधित मुद्दे