tags:

views:

53

answers:

1

I have a segment which can have many comments and each comment can have many tags. I can bind the comments to the segments using code like the below which is a function in the segment model class.

function prepareForGettingSegmentsWithComments() {
  $this->bindModel(
   array('hasMany' => array(
     'Comment' => array(
      'className' => 'Comment',
      'foreignKey'    => 'segmentID'

     )
    )
   )
  ); 
 }

However how can I bind in the Tags as well?

A: 

Yes, in this situation, I bind the Tags to the Comments with a belongsTo. Then filter the results with some query conditions.

Let me see if I can find an example snippet somewhere,

if(isset($this->params['named']['category'])){
  $this->Link->bindModel(
    array('belongsTo' => array(
          'CategoriesLink' => array(
              'className' => 'CategoriesLink',
              'foreignKey' => 'id',
          )
      )),
    array('belongsTo' => array(
          'Category' => array(
              'className' => 'Category',
              'foreignKey' => 'categories_link_id',
          )
      ))
  );

  $data = $this->paginate('Link', array('CategoriesLink.category_id'=>$this->params['named']['category']));
} else {
  $data = $this->paginate('Link', array('Link.status_id'=>'1'));
}

$this->set('links', $data);

This is how I did it when I was trying to paginate my Link model by a related field. This was with Cake1.2 though, but I think the principle is the same.

I would also recommend installing DebugKit, http://www.ohloh.net/p/cakephp-debugkit , then tinker with the links and conditions until you get a query which works for you.

Sorry, not very technical ;) I'm sure someone can give you a more accurate answer.

PS, Having just reread the question, do you not have these Models linked already? Surely hooking them up in the Models through CakePHP relationships, you'd not need to bind the models and could just use Containable or unbindModel()

DavidYell
Thanks, and yes I would like to make the connections between the models permanent, but I tried for hours to make that happen. Fruitlessly. The only way I could link models was to do it dynamically.
paullb