Можете ли вы загружать при использовании курсора на модели? - PullRequest
1 голос
/ 03 апреля 2019

Я хочу перебрать большой набор данных с помощью курсора, однако некоторая информация, которая мне нужна, находится в связанной модели.

// 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() для этой ситуации вместо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...