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 !

9 réponses


ndiayejp
Auteur

toujours pas de réponse à mon post je n'avance pas sur le countercache

ndiayejp
Auteur

ça ne marches pas cette méthode déja essayé !

tu as ajouté en base le champ pour le count?

ndiayejp
Auteur

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') );

}
ndiayejp
Auteur

si vous avez une idée je prends de suite !

Perso quand je commence à bloquer sur les contraintes du HABTM de cake, j'ai systématiquement recours au hasMany through , doc ici

ndiayejp
Auteur

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') );