Вам не надо ManyToMany между User и Follower, т.к. Follower - это и так юзер. Т.е. нужна связь ManyToMany между Users и Users :) Это же вы и сделали в примере с 2 таблицами. Но, такой вариант будет не очень-то гибок.
Лучше будет сделать отдельную сущность Followship в которой установить 2 связи к User типа OneToMany. Но, только в том случае, если для Followship надо хранить еще какие-то св-ва, например createdAt.
Собственно, пример, который вы нашли вполне справедлив и готов к использованию.
Чтобы получить, кто подписан на пользователя, обратитесь к св-ву $friendsWithMe.
Чтобы получить, на кого подписан пользователь, см. $myFriends.
Какую в вашем примере несет информацию идентификатор подписанности?
что значит при каждом запросе пользователя, он будет тянуть и его подписчиков и тех на кого он подписан
Что значит "тянуть"? Почему вы так решили? Зависит, как вы жадность для связи установите.