Re: DataObjects joins
| From: | Justin Patrin | Date: | Fri, 28 Jan 2005 22:16:12 +0000 |
| Subject: | Re: DataObjects joins | ||
| References: | 1 2 3 4 5 6 7 | Groups: | php.pear.general |
| Request: | Send a blank email to pear-general+get-17267@lists.php.net to get a copy of this message | ||
On Fri, 28 Jan 2005 16:09:26 -0500, James Stewart <lists@jystewart.net> wrote:
>
> On Jan 28, 2005, at 3:50 PM, Justin Patrin wrote:
>
> > \On Fri, 28 Jan 2005 14:49:22 -0500, James Stewart
> > <lists@jystewart.net> wrote:
> >>
> >> On Jan 28, 2005, at 1:51 PM, Justin Patrin wrote:
> >>
> >>> On Fri, 28 Jan 2005 13:43:10 -0500, James Stewart
> >>> <lists@jystewart.net> wrote:
> >>>> On Jan 28, 2005, at 1:29 PM, Justin Patrin wrote:
> >>>>> On Fri, 28 Jan 2005 13:14:45 -0500, James Stewart
> >>>>> <lists@jystewart.net> wrote:
> >>>>>> $staff = DB_DataObject::factory('member');
> >>>>>> $attendance = DB_DataObject::factory('staff_conference');
> >>>>>> $position = DB_DataObject::factory('position');
> >>>>>> $staff->joinAdd($attendance);
> >>>>>> $staff->joinAdd($position);
> >>>>>>
> >>>>>> $position->school = $college_id;
> >>>>>> $position->whereAdd('end_date IS NULL');
> >>>>>>
> >>>>>> $staff->find();
> >>>>>>
> >>>>>> and the error I'm seeing is:
> >>>>>>
> >>>>>> joinAdd: staff_conference has no link with member
> >>>>>>
> >>>>>> my <dbname>.links.ini file contains:
> >>>>>>
> >>>>>> [staff_conference]
> >>>>>> member_id = member:id
> >>>>>> member_id = registration:registrant
> >>>>>> member_id = position:member
> >>>>>>
> >>>>>> Through a little digging around I discovered that DB_DataObject is
> >>>>>> only
> >>>>>> recognising the last link where there are several from the same
> >>>>>> field
> >>>>>> in the originating table. Can anyone recommend a way around this?
> >>>>>>
> >>>>>
> >>>>> Ummm...how are you expecting that to work? One field can only link
> >>>>> to
> >>>>> one table. Sounds like the first one is the real one (member_id
> >>>>> links
> >>>>> to member:id) and the other two should be set up in the other
> >>>>> tables
> >>>>>
> >>>>> [registration]
> >>>>> registrant = member:id
> >>>>
> >>>> I'm linking that field with different tables depending on the
> >>>> context.
> >>>> In some cases the registrant is a member, but in others they're a
> >>>> guest
> >>>> and so linked with another table. Where necessary, I use
> >>>> registration.reg_type to check that.
> >>>>
> >>>
> >>> Well...this isn't possible with the normal links.ini setup. It only
> >>> allows for one link per field. After all, how would DO know which you
> >>> meant when you called $do->getLink('member_id')?
> >>>
> >>> You may want to check out my Dynamic Links idea:
> >>> http://opensource.21st.de/tiki-index.php?
> >>> page=Beyond+Advanced#id921023
> >>
> >> Looks interesting. I'll definitely have to look into that when time
> >> allows. In the meantime...
> >>
> >>> If you don't want to do something like that, I'd suggest putting only
> >>> one link in the links.ini and then, if you're doing joinAdd, give it
> >>> the additional info in the other parameters to make the link.
> >>
> >> Do you mean I can build a link without it being mentioned in the
> >> links.ini file? Could you give an example of how that might work? My
> >> initial attempt of:
> >>
> >> $staff = DB_DataObject::factory('member');
> >> $attendance =
> >> DB_DataObject::factory('staff_conference');
> >>
> >> $attendance->joinAdd($staff,'','','member_id');
> >>
> >> resulted in the same error as before.
> >
> > Try putting the parameters in those other two parameters.
>
> Trying:
> $attendance->joinAdd($staff,'inner','mem','member_id');
>
> I still get the same error: "member has no link with staff_conference"
>
> I've tried with all the join options
> ('','inner','right','left') with
> no success, and I've tried removing all references to both tables from
> the dbname.links.ini file. Am I missing something very obvious?
>
Hmmm, I guess I was wrong.
try
joinAdd(array('table', 'field:id'));
you may need more parameters...I'm not sure.
--
Justin Patrin