Re: setting up relationships
[prev]
[thread]
[next]
[Date index for 2004/06/22]
hi tony--
my gift to you will be "the idiot's guide to CDBI", once i've mastered
the concepts enough myself that i can actually explain them.
thanks!
steve
On Tue, 2004-06-22 at 00:41, Tony Bowden wrote:
> On Mon, Jun 21, 2004 at 11:34:31PM -0700, steve shapero wrote:
> > I've studied your email several times now and messed around with my
> > code to try out my understanding. i finally get what this moniker
> > business is all about. note to documentation writers: it is implied
> > (if i am finally actually getting a clue here) that you have named
> > columns in your database according to this rubric. or rather, the wise
> > man will name his columns according to this rubric. the foolish man
> > will insist on confusion by using whatever naming convention his old
> > russian app developer taught him as a young man.
>
> Class::DBI should only be falling back on the moniker for relationships
> if you haven't set up your reciprocal has_a relationships. If you have,
> then it will use those instead.
>
> So if you have
>
> CD->has_a(artist_id => Artist);
>
> then when you do
>
> Artist->has_many(cds => CD);
>
> It will know that the linking column is 'artist_id'. If you don't have
> that has_a() it will assume that it is simply 'artist'.
>
> To avoid the confusion, just ensure that you have your has_a() set up.
>
>
> > to me, it is rather profound that there is some english language
> > interpolation going on based on how you name things. call me slow but
> > this is in no way obvious from the documentation and ends up being
> > really confusing to those of us who insist on doing everything the hard
> > way (i.e. their own way).
>
> This is in the documentation for has_many:
>
> When setting up the relationship we examine the foreign class's has_a()
> declarations to discover which of its columns reference our class.
> (Note that because this happens at compile time, if the foreign class
> is defined in the same file, the class with the has_a() must be defined
> earlier than the class with the has_many(). If the classes are in dif-
> ferent files, Class::DBI should be able to do the right thing). If no
> such has_a() declarations can be found, or none link to us, we assume
> that it is linking to us via a column named after the moniker() of our
> class. If this is not true you can pass an additional third argument to
> the has_many() declaration stating which column of the foreign class
> references us.
>
> Feel free to supply patches to make the documentation clearer!
>
> Tony
>
|
(message missing)
|