Bonjour,
J'ai un gros soucis avec le HABTM de cakephp !
j'ai deux modèles company et sector défini ci dessous:
Modele Company
class Company extends AppModel{
public $hasAndBelongsToMany = array('Sector');
public $hasMany = array('CompanySector');
}
.
Modèle Sector
<?php
class Sector Extends AppModel{
public $hasAndBelongsToMany = array('Company');
public $hasMany = array('CompanySector');
Modèle de liaison
<?php
class CompanySector extends AppModel{
public $useTable = 'companies_sectors';
public $belongsTo = array(
'Company',
'Sector'=>array(
'counterCache'=>true,
));
}
Impossible de faire marcher le counter cache et il me semble que j'ai respecté les normes mais rien n'y fait ! quelqu'un a une idée !
oui je l'ai rajouté pour les deux tables ! je mets la structure de mes models si dessous
Donc j'ai un modele Company
<?php
class Company extends AppModel{
public $hasAndBelongsToMany = array(
'Sector'=>array(
'className' => 'Sector',
'joinTable' => 'companies_sectors',
'foreignKey' => 'company_id',
'associationForeignKey' => 'sector_id',
'unique' => true
)
);
public $hasMany = array('CompaniesSector');
Model Sector
<?php
class Sector Extends AppModel{
public $hasAndBelongsToMany = array(
'Company' => array(
'className' => 'Company',
'joinTable' => 'companies_sectors',
'foreignKey' => 'sector_id',
'associationForeignKey' => 'company_id',
'unique' => true ,
)
);
public $hasMany = array('CompaniesSector');
Modeles de liaisons CompaniesSector
<?php
class CompaniesSector extends AppModel{
public $useTable = 'companies_sectors';
public $belongsTo = array(
'Company'=>array('counterCache' => 'sector_count'),
'Sector'=>array('counterCache' => 'company_count') );
}
Perso quand je commence à bloquer sur les contraintes du HABTM de cake, j'ai systématiquement recours au hasMany through , doc ici
Ya pas vraiment pas d'alternative je veux quand meme respecter la logique cakephp ! et ne pas passer pas des chemins que je maitrise pas forcémeent j'ai jamais utilisé ce type de relation HasMany through
bien que ca soit en retard comme réponse , je pense ( mais je ne suis sure , faut tester ) que dans le code , vous devez écrire ci dessous :
'Company'=>array('counterCache' => true),
'Sector'=>array('counterCache' => true
) );
au lieu de
'Company'=>array('counterCache' => 'sector_count'),
'Sector'=>array('counterCache' => 'company_count') );