[Dbix-class] an error about search_related

chylli lchangying at gmail.com
Wed Aug 1 17:36:49 GMT 2007


HI:
I have three tables described as Catalyst::Plugin::Authorization:
Roles, UserRole, Users:

Roles.pm is:
__PACKAGE__->add_columns(
    "id",
    "role",
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->add_unique_constraint( "role_2", ["role"] );

__PACKAGE__->has_many(
    map_user_role => 'K68::Db::K68::UserRole',
    { 'foreign.role_id' => 'self.id' }
);

__PACKAGE__->many_to_many( "users" => "map_user_role", "user" );

UserRole.pm is:

__PACKAGE__->add_columns(
    "user_id",
    "role_id",
);
__PACKAGE__->set_primary_key( "user_id", "role_id" );

__PACKAGE__->belongs_to(
    "user" => "K68::Db::K68::Users",
    { 'foreign.id' => 'self.user_id' }
);
__PACKAGE__->belongs_to(
    "role" => "K68::Db::K68::Roles",
    { 'foreign.id' => 'self.role_id' }
);

Now I want to delete one record from UserRole. I know $admin_role is
'fadm1', and user_id is 1. I did:

    $c->model('K68::Roles')->search({role => $adm_role})
        ->search_related('map_user_role',{user_id => $user_id})->delete;

But it create a sql :

DELETE FROM user_role WHERE ( ( ( user_id = '1' ) AND ( role = 'fadm1' ) ) )

so catalyst report an error : Unknown column 'role' in 'where clause'

If I do so:
    $c->model('K68::Roles')->search({role => $adm_role})
        ->search_related('map_user_role',{user_id => $user_id})->first->delete;

it works.

I want to know:
why first way didn't work?

thanks
-- 

Thanks & Regards

Chylli




More information about the DBIx-Class mailing list