Schrift
[thread]3825[/thread]

DBIx::Class und rekursive Datenstrukturen

Leser: 1


<< >> 5 Einträge, 1 Seite
moritz
 2007-06-11 13:14
#35538 #35538
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Hallo,

um ein wenig Catalyst zu lernen schreibe ich gerade ein Gästebuch damit, und baue mir ein Backend mit DBIx::Class.

Das Gästebuch soll Threads darstellen können, und die entsprechende Datenbank hat die Einträge id, parent (die ID des Artikels, auf den geantwortet wurde), mesage, approved (ein boolean der angibt, ob der Artikel freigeschaltet wurde), timetamp, und eine Menge anderer Spalten, die gerade nicht von Interesse sind.

Meine Klasse sieht bisher so aus:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package MGBDB::Entry;

use base qw/DBIx::Class/;
__PACKAGE__->load_components(qw/PK::Auto Core/);
__PACKAGE__->table('mgb');
__PACKAGE__->add_columns(qw/id 
        ip 
        timestamp 
        parent 
        approved 
        message
               
 ...
        /);

__PACKAGE__->set_primary_key(qw/id/);

__PACKAGE__->has_many(siblings => 'MGBDB::Entry', 'parent');
1;


So, meine Fragen sind:

1) Ich hätte gerne eine Funktion, sagen wir filter(), die rekursiv nur Artikel liefert, bei denen approved == true wenn die Funktion mit einem true-Wert aufgerufen wurde, und nur solche, bei denen approved auf false steht, wenn sie mit 0 aufgerufen wurde.

Wenn ich ein einfaches
Code: (dl )
search( { approved => 1 })
mache, greift die Suchbedingung ja nur für die Toplevel-Einträge, und nicht für die "siblings".

2) Ich würde gerne per Default alle result sets dieses Modells absteigend nach `timestamp` sortieren - gibt es dazu einen eleganten Weg?

Wenn ich das Modell soweit habe, werde ich euch dann noch mit ein paar Catalyst-Fragen nerven ;-)
pq
 2007-06-11 13:28
#35539 #35539
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
zur sortierung:
__PACKAGE__->has_many(siblings => 'MGBDB::Entry', 'parent',  { order_by => 'timestamp'});
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
moritz
 2007-06-11 14:11
#35540 #35540
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Danke, works like a charm ;-)

Kann man dem has_many vielleicht noch mehr zusätzliche Bedingungen mitgeben?, a la
Code: (dl )
__PAKCKAGE__->has_many('MGBDB::Entry', 'parent', {order_by => 'timestamp DESC', 'foreign.approved' => 1});


So funktioniert es nicht, geht das irgendwie anders?
pq
 2007-06-11 14:27
#35541 #35541
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
da gab es neulich einen thread auf perlmonks zu.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
moritz
 2007-06-11 14:53
#35542 #35542
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Den habe ich gefunden, da ging es aber um ->search(), nicht um has_many->(), und ich sehe nicht, wie ich das auf meinen Fall anwenden kann :(.

Oder meintest du einen anderen?

Ich meine http://www.perlmonks.org/?node_id=559206
<< >> 5 Einträge, 1 Seite



View all threads created 2007-06-11 13:14.