En SQL, ce type de requête nécessite ce qu'on appelle un EXCEPTION JOIN
. Certains RDBMS l'implémentent en tant que type séparé (tel que DB2), tandis que d'autres doivent utiliser une solution de contournement. Dans votre cas, cela revient à (en SQL) :
SELECT User.*
FROM User
LEFT JOIN UserHouse
ON UserHouse.id_user = User.id
WHERE UserHouse.id_user IS NULL
Ce qui rendra les enregistrements "pas dans une maison" attendus.
Il existe des exemples similaires à plusieurs endroits sur ce site.
Je n'ai jamais utilisé Doctrine, donc je ne peux pas vous aider. Mais ma meilleure estimation serait quelque chose comme :
addWhere('uh IS NULL')
ou
addWhere('uh.id_user IS NULL')