Невозможно обновить поле с помощью Foreach в Laravel - PullRequest
0 голосов
/ 01 мая 2020

У меня есть следующий массив:

var_dump($steps_filt);

Вывод:

array(2) { [0]=> string(15) "Text1" [1]=> string(23) "Text2" }

И следующий объект:

var_dump($step_ids);
object(Illuminate\Support\Collection)#400 (1) { ["items":protected]=> array(2) { [0]=> int(2339) [1]=> int(2340) } }

Я пытаюсь обновить поля $ step_ids значениями $ steps_filt, используя приведенное ниже, но я уверен, что что-то не так, поскольку вывод неправильный:

   foreach($step_ids as $index => $steps_filt){

   DB::table('steps')->where('id', $step_ids)->update(['step' => $steps_filt]);

                    }

1 Ответ

1 голос
/ 01 мая 2020

Вы проверяли журнал ошибок? Это может дать вам представление о том, что может быть не так.

Но вот возможная проблема: переменная $step_ids представляет собой коллекцию Laravel. Вы перебираете элементы в коллекции, но вызов DB::table('steps')->where() ссылается на коллекцию вместо текущего идентификатора элемента (который вы назвали $steps_filt).

Я думаю, вы, возможно, неправильно поняли, как foreach петли работают в PHP. На первой итерации значение l oop $index будет равно 0, а $steps_filt будет, например, 2339.

Наивное решение для выполнения того, что вы хотите, может быть таким:

$step_ids_array = $step_ids->toArray(); // Easier to work with if both are array (or collection)
for ($i = 0; $i < count($step_ids_array); ++$i) {
    $step_id = $step_ids_array[$i];
    $step_text = $steps_filt[$i];
    DB::table('steps')->where('id', $step_id)->update(['step' => $step_text]);
}                 

Обновление : Возможно, немного чище, чтобы решить это следующим образом:

$combined = $step_ids->combine($steps_filt);

// $combined will now be a collection where the keys are the IDs and the values are the texts

foreach ($combined as $step_id => $step_text) {
    DB::table('steps')->where('id', $step_id)->update(['step' => $step_text]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...