[Dbix-class] problem with query using a column that doesn't exist

Guillermo Roditi groditi at gmail.com
Tue Jul 11 23:55:32 CEST 2006


Hi, I am trying to execute the following query:

$user->groups->search_related('items', { contact_id => $contact->id })->delete;

which is generating this SQL:
DELETE FROM `djd_group_items` WHERE ( ( ( `contact_id` = ? ) AND (
`user_id` = ? ) ) )

which makes no sense because user_id doesnt exist on that table....

my table definitions are short and attached below.  can anyone help? i
am deeply confused about this one. im running of -current right now
but it was failing with _05 as well.


###  $user is a JidMap row object
package DJabberd::RosterStorage::Schema::JidMap;

use strict;
use warnings;

use base 'DBIx::Class';

__PACKAGE__->load_components("PK::Auto", "Core");
__PACKAGE__->table("djd_jidmap");
__PACKAGE__->add_columns("id", "jid");

__PACKAGE__->set_primary_key("id");
__PACKAGE__->add_unique_constraint(jid => ["jid"]);

#GroupItems
__PACKAGE__->has_many('in_roster_groups' =>
                      'DJabberd::RosterStorage::Schema::GroupItems',
                      'contact_id');
#Rosters
__PACKAGE__->has_many('roster_items' =>
                      'DJabberd::RosterStorage::Schema::Rosters',
                      'user_id');
__PACKAGE__->has_many('in_roster_of' =>
                      'DJabberd::RosterStorage::Schema::Rosters',
                      'contact_id');
#RosterGroups
__PACKAGE__->has_many('groups' =>
                      'DJabberd::RosterStorage::Schema::RosterGroups',
                      'user_id');
1;

## $user->groups is this resultset
package DJabberd::RosterStorage::Schema::RosterGroups;

use strict;
use warnings;

use base 'DBIx::Class';

__PACKAGE__->load_components("PK::Auto", "Core");
__PACKAGE__->table("djd_roster_groups");
__PACKAGE__->add_columns("id", "user_id", "name");

__PACKAGE__->set_primary_key("id");
__PACKAGE__->add_unique_constraint(user_name => ["id","name"]);

__PACKAGE__->belongs_to
    ('user' => 'DJabberd::RosterStorage::Schema::JidMap',
     'user_id');

__PACKAGE__->has_many
    ('items' => 'DJabberd::RosterStorage::Schema::GroupItems',
     'group_id');
1;

## and finally this is the related resultset
package DJabberd::RosterStorage::Schema::GroupItems;

use strict;
use warnings;

use base 'DBIx::Class';

__PACKAGE__->load_components("PK::Auto", "Core");
__PACKAGE__->table("djd_group_items");
__PACKAGE__->add_columns("group_id", "contact_id");

__PACKAGE__->set_primary_key("group_id","contact_id");

__PACKAGE__->belongs_to
    ('group' => 'DJabberd::RosterStorage::Schema::RosterGroups',
     'group_id');

__PACKAGE__->belongs_to
    ('contact' => 'DJabberd::RosterStorage::Schema::JidMap',
     'contact_id');

1;



More information about the Dbix-class mailing list