requête Complexe relation n:n DQL
Bonsoir communauté,
je développe actuellement un annuaire web (en Symfony en utilisant Doctrine comme ORM) pour des cafés et restos et j'ai une recherche à mettre en place j'ai du mal à écrire la requête DQL qui feras le bouleau je vous explique mon schéma yml de ma base de données
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| Etablissement:
actAs:
Timestampable: ~
Sluggable:
unique: true
fields: [name]
canUpdate: true
columns:
name: { type: string(255), notnull: true }
quartier_id: { type: integer, notnull: true }
budget_moyen: { type: float, notnull: true}
is_activated: { type: boolean, notnull: true, default: 1 }
relations:
Quartier: { local: quartier_id, foreign: id, foreignAlias: Etablissements }
Services:
class: Service
refClass: ServiceEtablissement
local: id_etablissement
foreign: id_service
Quartier:
columns:
name: { type: string(255), notnull: true }
Service:
columns:
name: { type: string(255), notnull: true }
icon: { type: string(255), notnull: true }
relations:
Etablissements:
class: Etablissement
refClass: ServiceEtablissement
local: id_service
foreign: id_etablissement
ServiceEtablissement:
columns:
id_service: { type: integer, notnull: true }
id_etablissement: { type: integer, notnull: true }
relations:
Service: { local: id_service, foreign: id, foreignAlias: ServiceEtablissements }
Etablissement: { local: id_etablissement, foreign: id, foreignAlias: ServiceEtablissements } |
comme vous pouvez le constater un établissement à plusieurs services genre wifi, payement par carte bancaire, cave à vins, diffusion des matchs de foot, livraison à domicile ... donc pour sélectionner un établissement qui se trouve dans tel quartier et qu'il soit équipé du wifi et il diffuse les matchs de foot
sachant que je suis sur Doctrine pour le faire j'ai écrit ceci ... (ptet que c'est une connerie :oops: )
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public function getSearchResult($quartier = NULL,$services = NULL)
{
$q = $this->createQuery('a')
->leftJoin('a.ServiceEtablissements s');
if ($quartier) $q->Where('quartier_id = ?',$quartier);
if ($services)
{
foreach ($services as $k)
{
$q->andWhere('s.id_service = ?',$k);
}
}
return $q->execute();
} |
c'est dans la classe EtablissementTable que j'ai écris ceci
je sens que c'est pas très logique comme requête mais je vois pas comme m'y prendre ... merci d'avance :)