2009-01-15 17 views
10

Cho một resultset DBIx :: Class, ví dụ:Cách đúng để hiển thị DBIx :: Class ResultSet trong dự án Catalyst của tôi sử dụng Template Toolkit là gì?

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

các hướng dẫn Tôi đã đọc sử dụng stash để vượt qua một arrayref hàng:

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

Điều này dẫn đến truy vấn nhận được thực hiện vào thời điểm này, và các đối tượng do nhồi vào stash, để họ có thể được sử dụng trong TemplateToolkit như:

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

có một cách thích hợp để có TT lặp qua các hàng khi chúng được lấy từ DB?

Trả lời

19

Chắc chắn. Bạn có thể chuyển trực tiếp tập kết quả vào TT và lặp lại nó trong mẫu.

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

... và sau đó:

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

Hoặc, thậm chí tốt hơn:

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

... trong TT mẫu:

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

Tính năng này có hoạt động không? - FOREACH có một mảng, chứ không phải bản ghi âm, phải không? – Thelema

+0

Tôi đã đấu tranh rất nhiều nhưng đã sử dụng [% FOREACH foo IN foos%] nhưng tôi thấy rằng [% FOREACH foo = foos%] hoạt động tốt;) – nicomen

2

tôi làm:

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

Trong mẫu:

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

bộ nhớ đói với một kết quả lớn. – singingfish

+0

Có, đây là mã ví dụ, nhưng không hiệu quả lắm – Thelema

2

tôi đang làm chính xác những điều tương tự như tác giả.

Khi cố gắng tạo một cách tiếp cận MVC nghiêm ngặt hơn, tôi hiện đang xử lý các đối tượng DBIC trong bộ điều khiển và chuyển một dấu mốc rất đơn giản cho mẫu để hiển thị. (Lợi ích chính là mã có thể sử dụng lại bởi các tập lệnh khác thay vì chỉ giao diện web.)

Tôi tò mò nếu có ai biết điều này có hiệu quả hơn hay không, xử lý hoặc trí nhớ. Tôi sẽ nghĩ rằng phương pháp đầu tiên dẫn đến thời gian xử lý ít hơn nhưng giữ lại bộ nhớ lâu hơn. Tôi đoán phương pháp tiếp cận mới của tôi cần xử lý nhiều hơn một chút và bộ nhớ tạm thời hơn một chút, nhưng đối tượng tập kết quả có khả năng lớn không tồn tại lâu.

Các vấn đề liên quan