Насчет исключительных случаев не соглашусь. Проблема не сколько в получении прямоугольника, сколько получение прямоугольника с наибольшим периметром. За задачку спасибо, почитаю.
Как я понял, связанные данные будут в отдельном свойстве, то есть, например, что бы получить имя пользователя нужно сделать так: $admin->user->username, а не $admin->username