Hi Grigri,
Thanks for all your trouble, it's more clear to me now!
I'll go and try to implement this in my app.
(it's clear to me now that this is not something that is done in 1
Cakephp function/method)
On Oct 18, 11:55 am, grigri <[EMAIL PROTECTED]> wrote:
> I'm not 100% sure of the "official" way of doing this, but I'd do it
> by putting a specialized search function in the model. Which model is
> up to you - a bit of a grey area. I've written a quick (untested!)
> example, in which I've put it in the Author class. Depending on other
> stuff, it might make more sense for you to have a
> "findAllCategorizedByAuthor" function in the Book model, or something.
> Anyway:
>
> class Author extends AppModel {
> var $name = "Author";
>
> var $hasMany = array(
> 'Book'
> );
>
> function findCategorizedBooks($author_id) {
> // First get all the books
> // Order them by whatever you like, add extra conditions, ...
> // Set recursive to -1 - we'll get the categories later
> $books = $this->Book->findAllByAuthorId($author_id);
>
> // Build a lookup table of category ids to book indices
> $catLUT = array();
> foreach ($books as $bookIdx => $book) {
> $catId = $book['Book']['category_id'];
> if (!isset($catLUT[$catId])) {
> $catLUT[$catId] = array();
> }
>
> array_push($catLUT[$catId], $bookIdx);
> }
> // Grab the IDs for the findAll
> $catIds = array_keys($catLUT);
>
> // Find all the relevant categories
> // Again, set recursive to -1 because we've already for the books
> and the author
> // Order by whatever you like, add extra conditions, bla bla woof
> woof
> $cats = $this->Book->Category->findAllById($catIds);
>
> // Now loop through the category list and append the books
> foreach ($cats as $catIdx => $cat) {
> $cats[$catIdx]['Book'] = array();
> foreach ($catLUT[$cat['Category']['id']] as $bookIdx) {
> array_push($cats[$catIdx]['Book'], $books[$bookIdx]['Book']);
> }
> }
>
> // We're done
> return $cats;
> }
>
> }
>
> Like I said, not tested, but I have written similar code before on a
> cake project of mine - the concept is sound.
> (Formatted a bit better here:http://openpaste.org/en/3506/)
>
> On Oct 18, 10:06 am, BoSc <[EMAIL PROTECTED]> wrote:
>
> > Hi,
>
> > I've got 3 tables with a 1:n relationship:
>
> > - author (has many books)
> > ^
> > |
> > |
> > V
> > - books (belongs to categories) (has many authors)
>
> > |
> > |
> > V
>
> > - categories (has many books)
>
> > What I would like to do on one page, is show a categorized view of all
> > books by a specific author. The problem lies in the fact that each
> > category and each book also has some kind of sorting involved, which
> > states at what place in a category a book should be shown...
>
> > >From which Point of View should I query this, and am I able to
>
> > implement this in 1 query?
>
> > What I would like to end up with is the following array
>
> > array
> > category 2
> > book 1
> > name
> > blabla
> > book 3
> > name
> > blabla
> > book 2
> > name
> > blabla
> > category 1
> > book 4
> > name
> > blabla
> > book 6
> > name
> > blabla
> > book 5
> > name
> > blabla
>
> > The problem is, when I use findAll on Category, I'm not able to choose
> > how Cake should order the Books. Any workarounds?
>
> > Thanks
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Cake
PHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---