[Dbix-class] Fine-tuning of prefetched relationships

Shea Levy shea.levy at logicblox.com
Mon Apr 1 19:13:56 GMT 2013


Hi Peter,

On 04/01/2013 09:37 AM, Peter Rabbitson wrote:
> On Mon, Apr 01, 2013 at 09:07:51AM -0400, Shea Levy wrote:
>> 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?
> Not currently, however - what is so scary/undesirable about "modifying the schema" ?
>
> That is a real question - you are not the first to word things thusly. I
> need to figure out where the fear to add an extra definition is coming
> from.

Currently, the schema files are purely generated from the sql schema, 
created at build time. I know that Schema::Loader leaves an area of the 
file unchanged between invocations, but I generally prefer a clean 
separation between generated code and hand-written code. If that's the 
only way to do it, though, it's not a deal-breaker or anything.

Thanks,
Shea

> Cheers
>




More information about the DBIx-Class mailing list