В Laravel кешируются отношения.
При первом обращении к $book->position
он выполняет запрос, потому что модель position
еще не существует.После выполнения запроса модель position
добавляется к объекту $book
.Как следствие, каждый последующий вызов $book->position
будет использовать этот объект без запуска нового запроса к базе данных.
Это поведение по умолчанию, но вы можете использовать Laravel для выполнения всего, что вам нужно.
Если вы хотите загрузить модель со связью в одном запросе (полезно для большой коллекции объектов), вы можете загрузить ее:
$book = BookModel::with('position')->findOrFail(7); // $book->position is immediately populated
Если вам нужно форсировать новый запрос, когда данныеуже кэширован, вам нужно получить доступ и запросить отношения:
$position = $book->position()->first(); // Force the execution of a new query
или
$book->load('position');