Хорошо, вот моя проблема. У меня есть код для получения записей Walkaround за последние 24 часа. Затем я перебираю их в foreach и для каждого Walkaround я перебираю его свойство ->questions
и задаю свойство test для каждого вопроса, вот мой код:
$walkarounds = Walkaround::where('driver_id', $request->user()->id)->with(
[
'questionnaire' => function ($q) {
$q->with(
[
'questions'
]
);
}
]
)->get();
foreach ($walkarounds as $walkaround) {
$i = 0;
foreach($walkaround->questionnaire->questions as $question) {
Log::info($walkaround->id);
$question->test = $walkaround->id;
}
}
return $walkarounds;
Проблема в том, что в моем laravel.log
, правильный $ walkaround-> id регистрируется так:
> [2020-03-04 13:28:37] development.INFO: [WalkaroundsController@index -
> L:50] 20 [2020-03-04 13:28:37] development.INFO:
> [WalkaroundsController@index - L:50] 20 [2020-03-04 13:28:37]
> development.INFO: [WalkaroundsController@index - L:50] 20
> [2020-03-04 13:28:37] development.INFO: [WalkaroundsController@index -
> L:50] 21 [2020-03-04 13:28:37] development.INFO:
> [WalkaroundsController@index - L:50] 21 [2020-03-04 13:28:37]
> development.INFO: [WalkaroundsController@index - L:50] 21
> [2020-03-04 13:28:37] development.INFO: [WalkaroundsController@index -
> L:50] 22 [2020-03-04 13:28:37] development.INFO:
> [WalkaroundsController@index - L:50] 22 [2020-03-04 13:28:37]
> development.INFO: [WalkaroundsController@index - L:50] 22
> [2020-03-04 13:28:37] development.INFO: [WalkaroundsController@index -
> L:50] 23 [2020-03-04 13:28:37] development.INFO:
> [WalkaroundsController@index - L:50] 23 [2020-03-04 13:28:37]
> development.INFO: [WalkaroundsController@index - L:50] 23
> [2020-03-04 13:28:37] development.INFO: [WalkaroundsController@index -
> L:50] 24 [2020-03-04 13:28:37] development.INFO:
> [WalkaroundsController@index - L:50] 24 [2020-03-04 13:28:37]
> development.INFO: [WalkaroundsController@index - L:50] 24
> [2020-03-04 13:28:37] development.INFO: [WalkaroundsController@index -
> L:50] 25 [2020-03-04 13:28:37] development.INFO:
> [WalkaroundsController@index - L:50] 25 [2020-03-04 13:28:37]
> development.INFO: [WalkaroundsController@index - L:50] 26
> [2020-03-04 13:28:37] development.INFO: [WalkaroundsController@index -
> L:50] 26 [2020-03-04 13:28:37] development.INFO:
> [WalkaroundsController@index - L:50] 26 [2020-03-04 13:28:37]
> development.INFO: [WalkaroundsController@index - L:50] 27
> [2020-03-04 13:28:37] development.INFO: [WalkaroundsController@index -
> L:50] 27
Однако в возвращенном $walkarounds
каждый walkaround->questionnaire->questions->test
является тем же значением, даже если оно явно зарегистрировано как отличающееся.
Я знаю, что это бессмысленное использование, так как у меня уже есть объем walkaround_id в каждом обходе как id, на самом деле я пытаюсь установить другое свойство с именем answer
при получении записи Ответа для вопроса и обхода, мое реальное использование столкнулось с той же проблемой, когда я получил ответ на правильный вопрос, но все ответы для всех обходов были одинаковыми, потому что, кажется, всякий раз, когда я использую $walkaround->id
за пределами Log::info
, в where()
или даже в этом случае, просто устанавливая свойство test, он делает все использования такими же, как $walkaround->id
в последней итерации l oop Поэтому, несмотря на то, что у всех обходов были разные ответы, все они выглядели одинаково.
Это очень, очень удивительно. Когда я делал что-то вроде этого:
$question->answer = Answer::where('question_id', $q->id)->where('walkaround_id', $walkaround->id)->with('defects')->first();
Я даже отключил используемую sql, и все запросы выполнялись с правильным walkaround_id
Если я настроил тест переменная типа $i
и увеличивается для каждого обхода и использует его как walkaround_id, он будет работать.
Что здесь происходит? Это очень странно.
Я также пробовал это:
for ($i = 0; $i < count($walkarounds); $i++) {
for ($n = 0; $n < count($walkarounds[$i]->questionnaire->questions); $n++) {
$walkarounds[$i]->questionnaire->questions[$n]->test = $walkarounds[$i]->id;
}
}