[Dbix-class] Fine-tuning of prefetched relationships

Shea Levy shea.levy at logicblox.com
Mon Apr 1 13:07:51 GMT 2013


On 04/01/2013 08:58 AM, Peter Rabbitson wrote:
> On Mon, Apr 01, 2013 at 08:54:55AM -0400, Shea Levy wrote:
>> Hi Peter,
>>
>> On 04/01/2013 08:46 AM, Peter Rabbitson wrote:
>>> On Mon, Apr 01, 2013 at 08:43:43AM -0400, Shea Levy wrote:
>>>> Hi all,
>>>>
>>>> In my db, a Project has many Jobs. I have a query on Projects where
>>>> I want to:
>>>>
>>>> 1. Sort the jobs of each project by a particular column on the Jobs table
>>>> 2. Only include jobs that satisfy some criterion, without excluding
>>>>     projects where no such jobs exist (i.e. add a condition to JOIN ON,
>>>>     not WHERE)
>>>>
>>>> Are either of these possible with a single search on Projects?
>>>> Currently we're breaking it up into two queries.
>>> Both are possible using usual syntax (and a custom-condition
>>> relationship) in a single query using the 0.08242 or greater (not yet
>>> released) version.
>> So something like (using Catalyst in my project):
>>
>> $c->model('DB::Projects')->search({ "jobs.hidden" => 0} {order_by =>
>> "jobs.name" })
>>
> Almost - jobs.hidden will produce a WHERE condition (what you do not
> want). Instead you want to declare a *new* relationship like this:
>
> https://github.com/dbsrgits/dbix-class/blob/master/t/lib/DBICTest/Schema/Artist.pm#L53

Ah, I see. So I guess there's no way to do this without modifying the 
schema?

> Cheers




More information about the DBIx-Class mailing list