Monday, November 29, 2010

Sorting Related HABTM Model Data With Cake's Containable Behavior

Quite some time ago, Felix Geisendörfer created a behavior for CakePHP called `Containable`, which has since been added to CakePHP's core. I read about it and it always looked pretty interesting, but I dropped out of the CakePHP realm for a few years while I was busy completing my CSE degree. But now I'm back, and I stumbled upon a need to sort related data from a HABTM relationship. My heart filled with dread as I contemplated the ways to do this, mostly with CakePHP trickery and slow performing SQL queries. But luckily, Containable came to the rescue! I found a blog post that was extremely helpful, but it was written for the pagination helper, which I wasn't using. So below is the solution rewritten for regular find() calls to a model. Here's what my association looks like:
Event hasAndBelongsToMany Image

And I needed to make it so that when retrieving an event, the associated Image data was sorted by a specific field. Here's how to do that using Containable:
[php]public function myAction($order) {
$this->Event->Behaviors->attach('Containable');
$this->Event->contain(array(
'Image' => array(
'order' => $order
)
));

$event = $this->Event->find('first');

$this->set(compact('event'));
}[/php]

Well that was easy... hopefully I just saved you from a world of hurt.

2 comments:

  1. Thanks in advance and good luck, www.bretkuhns.com ! :)

    ReplyDelete
  2. Sildenafil ohne rezept, Leichte: fliegende Hitze, Kopfschmerzen, Nasenverstopfung, Magenschmerzen, nach Mahlzeiten. Diese Nebenwirkungen brauchen normalerweise keine medizische Behandlung. Normalerweise verschwinden diese, sobald sich der Korper an das Medikament gewohnt hat. Viagra rezeptfrei bestellen
    Der Mann sollte das Sildenafil citrate ungefahr 30 bis 60 Minuten vor dem geplanten Geschlechtsakt einnehmen. Denn solange benotigt das Mittel um zu wirken. Als Ausgleich hierfur wirkt es danach ein paar Stunden. Und das beste daran: nachdem das Mittel in der Regel zur Tablettenform verarbeitet wird, muss der Partner oder die Partnerin es nicht einmal bemerken, dass der Mann Sildenafil citrate einnimmt. Ferner kann der Mann diese Tabletten so dosieren, wie er es benotigt. Somit treten auch keine unerwunschten Nebenwirkungen auf und gesundheitsbedenklich ist diese Einnahme somit auch nicht. Kamagra Oral Jelly.
    Kamagra ist das bekannteste Generikum von Viagra (das hei?t, die beiden Medikamente haben denselben Wirkstoff, und namlich Sildenafil). Obwohl das Praparat relativ jung ist, genie?t es schon einen guten Ruf auf dem europaischen Markt. Kamagra hat vielen Mannern geholfen, Potenzprobleme zu besiegen. Kamagra Deutschland
    * Herzinfarkt aus so genannten vorangegangenen 90 Tagen * Engegefuhl aus fur Brust, das wahrend einer sexuellen Aktivitat auftrat * Herzschwache * Herzrhythmusstorungen * Zu niedrigen Blutdruckwerten * Schweren Leberfunktionsstorungen * Schlaganfall wahrend fur vorangegangenen 6 Monate * Bekannter erblich bedingter Erkrankung des Augenhintergrundes * Das Arzneimittel darf keinsfalls von Personen unter 18 Jahren und Frauen eingenommen werden
    http://216.122.148.84/forum_item.php?id=2835
    http://vinterferier.dk/skivejr
    http://www.17thscv.com/index.php?option=com_joobb&view=editpost&topic=588&post=0&Itemid=0
    http://www.2shot-room.com/bbs/bbs05/minibbs.cgi?view=267444
    http://www.umicha.com/kyudo/bbs/c-board.cgi?cmd=one;no=148283;id=

    ReplyDelete