Thread DBIx::Class nur ein update mit in(...) (4 answers)
Opened by Martin at 2014-07-11 18:51

Gast Martin
 2014-07-11 18:51
#176389 #176389
Guten Tag,

ich würde gerne in Catalyst die Spalte price einer Tabelle updaten. Ich habe eben 2 Stunden gegoogelt und die CPAN-Dokumentation gelesen, aber habe dazu nichts gefunden.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
    $c->model('PVDB::Product')->search(
        {
            -and =>
              [ 
                { id => { in => \@ids } },
                { price => { '<>' => 100 } },
              ],
        },
    )->update( { price => 100 } );  

Dies funktioniert an sich, nur wird da für jedes Element in @ids ein update ausgeführt:

Code: (dl )
1
2
3
4
...
UPDATE products SET price = ? WHERE ( id = ? ): '100', '205'
UPDATE products SET price = ? WHERE ( id = ? ): '100', '215'
...


Gibt es eine Möglichkeit, mit DBIx::Class anstelle der vielen Statements nur eins auszufürhren, z.B.
Code: (dl )
UPDATE products SET price = 100 WHERE id IN ( 205, 215, 300, ..., 712 )

Es kann vorkommen, dass da mehrere 1000 Produkte aktualisiert werden, was jeweils ein paar Sekunden dauert, und ich würde schon gerne auf der Ebene DBIx::Class bleiben und tiefer gehen, z.b SQL::Abstract oder sogar SQL pur.

Ich verwende für diese Spielerei die Datenbanken sqlite und PostgreSQL.

Vielen Dank und liebe Grüße,

Martin
Last edited: 2014-07-11 19:11:38 +0200 (CEST)

View full thread DBIx::Class nur ein update mit in(...)