[Dbix-class] additional condition in LEFT JOIN in DBIx::Class

Eden Cardim edencardim at gmail.com
Thu Sep 17 14:18:40 GMT 2009


On Thu, Sep 17, 2009 at 9:40 AM, Paweł Pabian <pawel.pabian at implix.com> wrote:
> Hi
>
> I have some users
>
> package Schema::User;
> __PACKAGE__->table('users');
> __PACKAGE__->add_columns('id', 'login');
> __PACKAGE__->set_primary_key('id');
> __PACKAGE__->has_many('attributes' => 'Schema::Attribute', 'users_id');
>
> and they have many attributes
>
> package Schema::Atrribute;
> __PACKAGE__->table('attributes');
> __PACKAGE__->add_columns('users_id', 'name', 'value');
> __PACKAGE__->set_primary_key('users_id', 'name');
> __PACKAGE__->belongs_to('user' => 'Schema::User', 'users_id');
>
> Now i want to find Users that don't have Attribute of given name.
> In raw SQL it needs name condition to be placed in LEFT JOIN:
>
> SELECT *
> FROM users AS u
> LEFT JOIN attributes AS a
>    ON u.id=a.users_id
>    AND a.name="car"
> WHERE a.users_id IS NULL
>
> How to force DBIx::Class to add this
> ----
> AND a.name="car"
> ----
> part to join condition?

DBIC doesn't support variable join conditions, but you can add the AND
a.name = 'car' condition to your where clause to the same effect.

-- 
   Eden Cardim       Need help with your Catalyst or DBIx::Class project?
  Code Monkey                    http://www.shadowcat.co.uk/catalyst/
 Shadowcat Systems Ltd.  Want a managed development or deployment platform?
http://edenc.vox.com/            http://www.shadowcat.co.uk/servers/



More information about the DBIx-Class mailing list