[SP-pm] DBIx::Class insert ignore
Wallace Reis
reis.wallace at gmail.com
Wed Sep 16 06:20:43 PDT 2009
2009/9/16 jimmy <jimmy.tty em gmail.com>:
> On Wed, Sep 16, 2009 at 09:38:00AM -0300, Jorge Augusto Senger wrote:
>> jimmy,
>>
>> dá uma olhada no método find_or_create:
>> http://search.cpan.org/~ribasushi/DBIx-Class-0.08111/lib/DBIx/Class/ResultSet.pm#find_or_create
> me corrija se estiver enganado para dessa forma ele irá executar um
> "select" antes de cada "insert" não é?
Sim, porém você usar o INSERT IGNORE não é correto, pois se
aconteceram erros, excessões são lançadas, assim você tem um problema
que precisa ser resolvido, ou evitando que os erros aconteçam ou
tratando-os.
Você poderia fazer uma consulta para retornar todos os registros já
existentes e usar isto para filtrar sua entrada, como:
my $rs = $schema->resultset('Foo')->search_rs({
my_pk_field => { -in => [@keys_from_bulk_data_ref] }
});
$rs->result_class('DBIx::Class::ResultClass::HashRefInflator'); # para
pular o passo de criação de row objects e retornar hashrefs
while (my $row_hashref = $rs->next) {
delete $bulk_data_ref->{$row_hashref->{my_pk_field}};
}
# insere os dados que restaram no $bulk_data_ref
...
--
wallace reis/wreis Catalyst and DBIx::Class consultancy with a clue
Software Engineer and a commit bit: http://shadowcat.co.uk/catalyst/
Shadowcat Systems Limited
http://www.shadowcat.co.uk http://www.linkedin.com/in/wallacereis
More information about the SaoPaulo-pm
mailing list