Я хочу перебрать большой набор данных с помощью курсора, однако некоторая информация, которая мне нужна, находится в связанной модели.
// Iterate over all the users and execute a function for each student that they have
foreach(User::with('students')->cursor() as $user) {
$user->students->each->executeSomething();
}
Если я посмотрю журналы запросов, то обнаружу, что для каждого пользователя создается новый запрос, что по существу делает избыточную нагрузку избыточной.
0 => array:3 [
"query" => "select * from `users`"
"bindings" => []
"time" => 22.28
]
1 => array:3 [
"query" => "select `user_student`.*, `student`.`id` as `pivot_id`, `student`.`name` as `pivot_name` from `user_student` inner join `student` on `user_student`.`id` = `student`.`id` where `student`.`id` is ?"
"bindings" => array:1 [
0 => 1
]
"time" => 0.56
]
2 => array:3 [
"query" => "select `user_student`.*, `student`.`id` as `pivot_id`, `student`.`name` as `pivot_name` from `user_student` inner join `student` on `user_student`.`id` = `student`.`id` where `student`.`id` is ?"
"bindings" => array:1 [
0 => 2
]
"time" => 0.56
]
Может ли курсор использоваться только для одного запроса? Должен ли я просто использовать chunk()
для этой ситуации вместо