а почему вы это делаете в самой джобе а не перед вызовом? как бы смысл создавать джобу, в ней проверять нужно ли ее выполнять, и если нужно отправлять в очередь саму себя еще раз. В чем цимес?
runprogr,
1. Нет. будет грузиться только модель авторизованного пользователя. Как with поменяет это? with - это банально все запросы User::query() - автоматом будет добавляться with('roles');
2. Эта конструкция не должна порождать 3 одинаковых запроса.