[Dbix-class] Bug with find_or_new and insert_or_update with postgresql: any success?

Alex Povolotsky tarkhil at over.ru
Tue Feb 26 09:56:21 GMT 2008


Zbigniew Lukasiak wrote:
> On Mon, Feb 25, 2008 at 9:53 PM, Alex Povolotsky <tarkhil at over.ru> wrote:
>   
>> Hello!
>>
>>  I've found in archives nearly my case, that passing NULL to Pg is not
>>  'not passing column at all', so adding a new row with a simple code like
>>  this
>>
>>   my $loc = $c->model($self->model_name)->find_or_new({lid => $id});
>>   if ($form->submitted && $form->validate) {
>>     # Fill in
>>  data
>>
>>     $loc->name($form->field('name'));
>>     $loc->descr($form->field('descr'));
>>     $loc->update_or_insert();
>>     $c->req->redirect($c->uri_for('list'));
>>   }
>>
>>  is impossible.
>>
>>  Maybe someone has found a good way to solve the problem, or at least a
>>  working workaround?
>>     
>
> Just guessing - are you using HTML::FormFu?  HTML::FormFu::Model::DBIC
> integrates FormFu with DBIC and works around this problem (by not
> using find_or_new nor update_or_create). Personally I would be very
> happy to see the debate on using the *_or_* methods for tables with Pg
> serial primary keys reopened - but there are workarounds for it.
>
>
>   
I'm using FormBuilder.

I've made an UGLY workaround

    if (defined $loc->lid) {
      $loc->name($form->field('name'));
      $loc->descr($form->field('descr'));
      $loc->update();
    } else {
      $c->model($self->model_name)->create({ map { $_ => 
$form->field($_) } qw(name descr)});
    }

But I hate it. Who can fix internal logic of DBIx::Class request builder?...
Alex.



More information about the DBIx-Class mailing list