HABTM associations have another config value that you need to specify
- associationForeignKey
class Term extends AppModel {
var $name = 'Term';
var $displayField = 'term_nice';
var $primaryKey = 'no';
var $hasAndBelongsToMany = array('Context' =>
array('className' => 'Context',
'joinTable' =>
'contexts_terms',
'conditions' => '',
'order' => '',
'foreignKey' => 'term_no',
'associationForeignKey' =>
'context_no'
)
);
}
You'll need to do the same with your other models. Also since you have
created a model for your join table, I would suggest using the 'with'
association.
Cheers,
Adam
On Mar 7, 5:07 am, Lisa B <[EMAIL PROTECTED]> wrote:
> In my project I can't use the default 'id' name for primary key
> fields, I have to use 'no'. I have to change a cake I already baked
> from using 'no' to 'id' everywhere. I hadn't customized it much and I
> could easily change the database and everywhere I could see in the
> views and models, and most pages work perfectly as before, except this
> one where the join is a HABTM.
>
> It is a dictionary app where a term can have many contexts and a
> context many terms. The query that is failing when I visit
> /contexts/view/5 is still looking for an '_id' field on the join, like
> this:
>
> Query: SELECT `Term`.`no`, `Term`.`term`, `Term`.`term_nice`,
> `Term`.`display`, `Term`.`import_date`, `ContextsTerm`.`context_no`,
> `ContextsTerm`.`term_no` FROM `terms` AS `Term` JOIN `contexts_terms`
> AS `ContextsTerm` ON (`ContextsTerm`.`context_no` IN (5) AND
> `ContextsTerm`.`term_id` = `Term`.`no`)
>
> In the view I'm not even trying to view the list of terms, I removed
> that section from the view that it baked, so I wish it weren't trying
> to do that query, but it's just a warning not an error, but that query
> crops up and breaks on another page as well where I do need it and I
> don't know where to look.. Perplexed, I am new to cake, thanks..
>
> term.php:
> class Term extends AppModel {
> var $name = 'Term';
> var $displayField = 'term_nice';
> var $primaryKey = 'no';
>
> var $hasAndBelongsToMany = array('Context' =>
> array('className' => 'Context',
> 'joinTable' => 'contexts_terms',
> 'conditions' => '',
> 'order' => '',
> 'foreignKey' => 'term_no'
> )
> );
>
> }
>
> context.php:
> class Context extends AppModel {
> var $name = 'Context';
> var $displayField = 'name';
> var $primaryKey = 'no';
>
> var $hasAndBelongsToMany = array('Term' =>
> array('className' => 'Term',
> 'joinTable' => 'contexts_terms',
> 'conditions' => '',
> 'order' => '',
> 'foreignKey' => 'context_no'
> )
> );
> }
>
> // I have modeled this so I can get easy pagination on another page
> which is also broken on that join
> class ContextsTerm extends AppModel {
> var $belongsTo = array('Context','Term');
> var $primaryKey = 'context_no';
>
> }
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---