Bonjour,
Voila je rencontre un petit problème avec mon code.
j'ai trois tables une supports(id,nom) l'autre configurations(id,config,support_id,ville_id) et l'autre geolocalisations(id,configuration_id)
voici le contenu des tables de mon models
SupportsTable
public function initialize(array $config)
{
parent::initialize($config);
$this->table('supports');
$this->displayField('id');
$this->primaryKey('id');
$this->addBehavior('Timestamp');
$this->hasOne('Configurations', [
'foreignKey' => 'support_id',
'dependent' => true,
'className' => 'Configurations',
'cascadeCallbacks' => true
]);
}
ConfigurationsTable
public function initialize(array $config)
{
parent::initialize($config);
$this->table('configurations');
$this->displayField('id');
$this->primaryKey('id');
$this->addBehavior('Timestamp');
$this->addBehavior('CounterCache', ['Villes' => ['configuration_count'],'Supports' => ['configuration_count']]);
$this->belongsTo('Supports', [
'foreignKey' => 'support_id',
'joinType' => 'INNER'
]);
$this->belongsTo('Villes', [
'foreignKey' => 'ville_id',
'joinType' => 'INNER'
]);
$this->hasMany('Geolocalisations', [
'foreignKey' => 'configuration_id'
]);
}
GeolocalisationsTable
public function initialize(array $config)
{
parent::initialize($config);
$this->table('geolocalisations');
$this->displayField('id');
$this->primaryKey('id');
$this->addBehavior('Timestamp');
$this->addBehavior('CounterCache', ['Users' => ['geolocalisation_count'], 'Annonceurs' => ['geolocalisation_count'], 'Configurations' => ['geolocalisation_count'], 'Villes' => ['geolocalisation_count'], 'Arrondissements' => ['geolocalisation_count']]);
$this->belongsTo('Users', [
'foreignKey' => 'user_id',
'joinType' => 'INNER'
]);
$this->belongsTo('Annonceurs', [
'foreignKey' => 'annonceur_id',
'joinType' => 'INNER'
]);
$this->belongsTo('Configurations', [
'foreignKey' => 'configuration_id',
'joinType' => 'INNER'
]);
$this->belongsTo('Villes', [
'foreignKey' => 'ville_id',
'joinType' => 'INNER'
]);
$this->belongsTo('Arrondissements', [
'foreignKey' => 'arrondissement_id',
'joinType' => 'INNER'
]);
$this->belongsTo('Quartiers', [
'foreignKey' => 'quartier_id',
'joinType' => 'INNER'
]);
}
dans mon controlleur GeolocalisationsControlleur, lorsque je fait ceci:
$this->loadModel("Administration.Configurations");
$supports = $this->Configurations->find()
->contain(['Supports'])
->all();
j'ai bel et biens tous mes data biens récupérées
mais si par contre je fait ceci:
$this->loadModel("Administration.Geolocalisations");
$supports = $this->Geolocalisations->Configurations->find()
->contain(['Supports'])
->all();
Configurations is not associated with Supports
pourtant lorsque je fait
$this->loadModel("Administration.Configurations");
$supports = $this->Configurations->find()
->contain(['Supports'])
->all();
j'ai bien mes résultats quelqu'un à une idée?
SVP
Merci pour tous ceux qui ont essayé de trouver une solution pour moi, j'ai résolumon problème en injectant le SQL directement dans l'application (datasource)
A mon avis il te faut créer une association de type HasAndBelongsToMany.
Car si je comprends bien ton problème, il fait l'association dans un sens mais pas dans l'autre. Et toi tu veux les deux sens ?
je ne pense pas vraiment en effet la table configuration contient l'id du support, la table geolocalisation contient l'id de configuration comme une transitivite donc ce que je veux faire c'est avoir les résultats des support depuis la table geolocalisation
je ne sais pas si vous avez compris
Bonsoir.
Tu devrais regarder dans la documentation : Eager Loading des Associations Via Contain.
Exemple :
$query = $articles->find()->contain([
'Authors' => ['Addresses'], 'Comments' => ['Authors']
]);
// ou via la notation par point
$query = $articles->find()->contain([
'Authors.Addresses',
'Comments.Authors'
]);
Justement @Lartak,
voici ce que j'ai d'abord utilisé la notation par point
$supports = $this->Geolocalisations->find()
->contain(['Configurations.Supports'])
->all();
et toujours le même résultat: Configurations is not associated with Supports
ce que je n'arrive pas a comprendre c'est le pourquoi en fesant $this->Configurations->Supports() j'ai bien le résultat attendu; mais lorsque je fait le $this->Gelocalisations->Configurations->Supports() on me dit que Configurations et Supports ne sont pas liées pourtant ici $this->Configurations->Supports() on voit bien la liaison