Перебор модели с foreach дает странные результаты - Lumen / Laravel - PullRequest
0 голосов
/ 06 февраля 2020

Я хочу перебрать модель с этой структурой:

{
  "id_coretable": 1,
  "Internal_key": "UPDATED1",
  "extensiontable_itc": {
    "description_itc": "UPDATED1"
  },
  "extensiontable_sysops": {
    "description_sysops": "UPDATED1"
  }
}

Он был получен с этим кодом:

$join = coretable::with($permittedTables)->find(1);

Где $permittedTables - это массив имен таблиц.

Теперь, когда я делаю это:

foreach($join as $el){
  log::info($el);
}

Я получаю следующие результаты:

[2020-02-06 11:32:36] local.INFO: 1  
[2020-02-06 11:32:36] local.INFO: 1  
[2020-02-06 11:32:36] local.INFO:   
[2020-02-06 11:32:36] local.INFO: 1  

Почему это так? Согласно Laravel документам, перебор КОЛЛЕКЦИИ должен определенно работать:

$users = App\User::where('active', 1)->get();

foreach ($users as $user) {
    echo $user->name;
}

См. https://laravel.com/docs/5.8/eloquent-collections

Теперь у меня определенно есть Модель, не коллекция. Я проверил это с if(...instanceof model). Тем не менее, когда я принудительно извлекаю коллекцию, используя ->findMany(1) вместо ->find(1), тогда вещи не становятся лучше. Использование коллекции на foreach l oop заставляет foreach только l oop выводить полную структуру один раз, а затем оставлять l oop. Если я теперь использую этот объект внутри вложенного foreach l oop, то получу те же результаты, что и выше.

Это нормальное поведение laravel? И если да, есть ли способ перебрать модель, особенно «2D-модель», как здесь?

Итог: чего я в конечном итоге хочу достичь, так это способности «динамически» назначать новые значения любому элементов модели, а затем сохранить его в БД. Если для этой цели я должен перезаписать вложенные «массивы» внутри модели новыми массивами, то так и будет, просто скажите мне, как это сделать xD Вход, который должен обновлять модель, будет иметь ТОЧНУЮ структуру и индексы, как модель. Вы также можете прочитать об этом в моем другом вопросе здесь: Laravel / Lumen / Eloquent - обновить coretable :: with ($ OneDimArrayOfTablenames) с многомерным массивом

В настоящее время я просто пытаюсь приблизиться решение по крупицам, так как этот вопрос не получил никаких ответов. И первое, что мне пришло в голову, это попытаться повторить модель и обновить ее поэлементно. Но, как вы видите, у меня тоже есть проблемы с этим .. ^^

...