[Catalyst] Updating a database entry

Francisco Obispo fobispo at isc.org
Sun Apr 3 19:59:49 GMT 2011


Remember that Catalyst uses DBIx::Class as an ORM, so it must be able to uniquely identified each row with a Primary Key.

If you're going to update the primary key (which is not usually a good idea), make sure that you have 'ON UPDATE CASCADE' on referencing child tables, otherwise the operation will fail.

Francisco

On Apr 3, 2011, at 12:25 PM, Adam Jimerson wrote:

> I managed to find my error that was causing my problem:
> 
> DBIx::Class::DynamicDefault::update(): Operation requires a primary key
> to be declared on 'TickIt::Schema::Result::Tech' via set_primary_key at
> /home/vendion/Projects/TickIt/script/../lib/TickIt/Controller/Admin.pm
> line 114
> 
> Does it make a difference that none of the fields that I am updating is
> my primary_key on my database?  Or is it complaining about the lack of a
> primary key all together?
> 
> Rohan M wrote:
>> Hi Adam,
>> 
>> Did you try putting result-set in the variable rather than directly
>> putting it into stash?
>> 
>> my $user = $c->model('DB::Tech')->find({id => $userid});
>> $user->update({ id => $username,
>>                               firstname => $fname,
>>                               lastname => $lname,
>>                               email => $email,
>>                               phone => $phone,});
>> 
>> Try this and let us know
>> 
>> On Sun, Apr 3, 2011 at 12:07 AM, Adam Jimerson <vendion at gmail.com
>> <mailto:vendion at gmail.com>> wrote:
>> 
>> First of all hello people of the list!
>> 
>> I am working on my first Catalyst app and need some help updating an
>> entry from my database.
>> 
>> $c->stash( users_rs => $c->model('DB::Tech'));
>> my $user = $c->stash->{users_rs}->find({ id => $userid });
>>  die "No such user: $userid\n" if (!$user);
>> $c->stash(user => $user);
>> $c->log->debug('Before update');
>> $user->update({
>>                               id => $username,
>>                               firstname => $fname,
>>                               lastname => $lname,
>>                               email => $email,
>>                               phone => $phone,
>>                       });
>> $c->log->debug('After update');
>> 
>> In the debug output from Catalyst I can see where the "Before update"
>> gets printed but fails with no error that I can see during the update.
>> Any help or advice in this matter would be greatly appreciated.
> 
> _______________________________________________
> List: Catalyst at lists.scsys.co.uk <mailto:Catalyst at lists.scsys.co.uk>
> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> Searchable archive:
> http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
> Dev site: http://dev.catalyst.perl.org/
> 
> 
> 
> 
>> -- 
>> रोहन मल्लेल्रवार
> 
> 
> 
> 
>> _______________________________________________
>> List: Catalyst at lists.scsys.co.uk
>> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
>> Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
>> Dev site: http://dev.catalyst.perl.org/
> 
> 
> _______________________________________________
> List: Catalyst at lists.scsys.co.uk
> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
> Dev site: http://dev.catalyst.perl.org/

Francisco Obispo 
Hosted@ Programme Manager
email: fobispo at isc.org
Phone: +1 650 423 1374 || INOC-DBA *3557* NOC
Key fingerprint = 532F 84EB 06B4 3806 D5FA  09C6 463E 614E B38D B1BE







More information about the Catalyst mailing list