Чтобы ответить на ваш реальный вопрос: нет убедительного объяснения, почему это было сделано именно так. "Да просто так".
Поскольку std::map
является ассоциативным контейнером, нет четкого заранее определенного диапазона ключей, которые должны существовать (или не существовать) на карте (в отличие от совершенно разных ситуация с std::vector
). Это означает, что с помощью std::map
вам нужны как непересекающиеся, так и вставные функции поиска. Можно перегрузить []
в неинтегрирующем режиме и обеспечить функцию для вставки. Или можно сделать наоборот: перегрузка []
в качестве оператора вставки и предоставление функции для неинтерактивного поиска. Итак, кто-то когда-то решил следовать последнему подходу. Вот и все.
Если бы они сделали это наоборот, возможно, сегодня кто-то задал бы здесь обратную версию вашего вопроса.
В Laravel нет родной поддержки для этого.
Я создал пакет для него: https://github.com/staudenmeir/eloquent-eager-limit
Используйте черту HasEagerLimit
как в родительской, так и в связанной модель.
class Brand extends Model {
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
}
class RelatedModel extends Model {
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
}
Тогда вы можете применить ->take(3)
к вашим отношениям.