1) Использовать связи доктрина на уровне энтити - это не лучшая практика, если мы говорим про хай-лоад, ибо она работает не самым лучшим образом. Для проектов, где записей в таблицы меньше 100к юзать в общем-то можно.
2) Если нужен запрос на языке доктрины к двум таблицам, то:
В репозитории одной таблицы пишем запрос, куда вставляем строку
...
->from(Client::class, 'cl')
->where('cl.siteId = c.siteId')
...
Т.е. идет запрос к основной таблицы с алисом 'c', добавляем доп-таблица с алиасом 'cl' свзяываются по siteId допустим и дальше уже как угодно все обрабатывается. Для Joint тоже самое, только вместо from идет join ...with