Mon problème: Obtenir les résultats de requête à partir de 2 tables db avec PROPEL2 même lorsque la seconde table n'a pas d'entrées correspondantes. Si le second a des entrées correspondantes, cela ne pose aucun problème.Propél: Obtenir les résultats de la requête à partir de 2 tables db même si la seconde table n'a pas d'entrées correspondantes
J'ai 3 tables: Entrée, Contingent et Favorit.
Le schéma est le suivant:
Entry.id [PK]
Entry.contingent_id [FK]
Entry.expert_id
Contingent.id [PK]
Contingent.name
Favorit.id [PK]
Favorit.contingent_id [FK]
Favorit.expert_id
Favorit.pos
Je veux obtenir un expert_id spécifié ($ id) toutes les entrées de l'entrée avec le nom-contingent et si existe les favorit.pos pour cet expert et contingent. Je me le voulais avec:
$result = EntryQuery::create()
->filterByExpertId($id)
->join('Entry.Contingent')
->withColumn('Contingent.name','_contingentName')
->join('Contingent.Favorit')
->where('Favorit.expert_id = ?', $id)
->find();
Cela ne fonctionne que s'il existe un tel favorit.pos. Dans certains cas, cet élément n'existe pas (ce que l'on attend du système). Dans ces cas, je veux obtenir le résultat aussi juste avec favorit.pos que vide, null ou 0. Mais Propel ne me renvoie pas ces enregistrements.
Avec MySQL Je n'ai aucun problème pour obtenir le résultat souhaité:
SELECT entry.* ,
(SELECT favorit.position
FROM contingent, favorit
WHERE
favorit.expert_id = entry.expert_id
AND entry.contingent_id = contingent.id
AND contingent.id = favorit.contingent_id
)
FROM `entry`
JOIN contingent
ON entry.contingent_id = contingent.id
WHERE
entry.expert_id=1;