Выдержка из документации Laravel 4 относительно красноречив в Dynamic Properties (аксессору) в отношениях (полужирный являются моими):
Eloquent позволяет вам получать доступ к своим отношениям с помощью динамических свойств. Eloquent автоматически загрузит отношения для вас и даже достаточно умна, чтобы узнать, следует ли вызывать метод get (для отношений один ко многим) или первый (для отношений один к одному). Затем он будет доступен через динамическое свойство с тем же именем, что и отношение.
Таким образом, используя метод, определенный для отношения к базе данных или динамическое свойство (accessor), будет вести себя по-разному.
Если выдать количество сообщений с использованием метода следующим образом:
$count = $tag->posts()->count();
Это будет генерировать правильный SQL с агрегатной функцией COUNT.
В другой стороны, если вы выдать количество сообщений с помощью динамического свойства (аксессор) следующим образом:
$count = count($tag->posts);
Это будет получать все сообщения, преобразовать их в массив объектов, а затем подсчет числа элементов массива.
В вашем случае выбор должен зависеть от использования сообщений, связанных с тегом. Если вы просто хотите подсчитать, используйте метод и функцию агрегата. Но, если помимо подсчета вы будете делать что-то еще с этими сообщениями, используйте динамическое свойство (accessor).
Если вы хотите получить чистый счетчик SQL, вы должны использовать этот метод вместо динамического свойства (accessor). У вас будет что-то вроде: '$ tag-> posts() -> count()'. –