[Dbix-class] PATCH: Support for arbitrary SQL in relationship
definition
Moritz Onken
onken at houseofdesign.de
Tue Jun 30 17:48:57 GMT 2009
Am 30.06.2009 um 18:10 schrieb David Ihnen:
> Rob Kinyon wrote:
>> Now, if someone can provide a solid use-case, then I'll be onboard.
>> But, adding features for the sake of adding features is how you end
>> up
>> with a crappy API.
>>
>> Rob
> Lets see if I can argue the use case. I tripped over this
> limitation and I *think* it was when I was doing this part of the
> implementation
>
> I have a data structure formed like so;
>
> Each client has a set of users. Clients are enumerated in a
> separate table, foreign keyed from the user table. They use the
> same structure for their hierarchy.
>
> Each user record thus has a client value, as well as a left and a
> right value. The data structure is maintained so that the left and
> right numbers are sequential - supervisor has left/right of 1/4, his
> single subordinate has left/right of 2/3 - on insert of another
> subordinate, supervisor becomes 1/6 and the second subordinate is
> 4/5. A sub-subordinate on the second user would be 5/6, moving his
> super to 4/7 and the top super to 1/8.
> This allows an arbitrary depth of organizational structure but
> allows straightforward queries for inheritance/supervisor permission
> checks.
>
> If the client is the same and their left and/or right are between
> your own, they are your subordinate.
>
> If the client is the same and you are between somebody else's left
> and right, they are your supervisor.
>
> The complication comes when I want to describe the relationships
> 'users subordinates' or 'users supervisors'. The constraint of 'in
> the same client' is part of the join term - not just a where clause.
>
> So I'd like to say something like this in my user model class:
>
> package DB:Schema::samp_user;
>
> __PACKAGE__->has_many('subordinates' => 'DB::Schema::samp_user',
> { 'subordinates.client' => 'samp_user.client', 'subordinates.lft' =>
> { '-between' => [ 'samp_user.lft', 'samp_user.right' ] } } );
>
> But I can't, because you can't specify complicated join conditions
> like that.
>
> So what do you think, is that a solid use case?
>
> David
>
Hi David,
work is in progress to add this feature to DBIC. The proposed syntax
can be found here: http://dev.catalyst.perl.org/svnweb/bast/revision/?rev=6890
feel free to add your own test case to this branch (http://dev.catalyst.perl.org/repos/bast/DBIx-Class/0.08/branches/extended_rels/
)!
cheers,
moritz
More information about the DBIx-Class
mailing list