Laravel / Lumen: обработка результатов выборки Model :: With ('Relation') - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть три связанные таблицы: Таблица Coretable, на которую ссылаются Таблица extensiontable_it c и extensiontable_sysops.

Теперь я хочу получить все записи из coretable, на которые ссылаются extensiontable_it c и extensiontable_sysops, и для этого я запускаю этот код:

$join = coretable::with('extensiontable_itc','extensiontable_sysops')->get();

и этот вид работ, я получаю следующий результат:

[{
  "id": 1,
  "Internal_key": "TESTKEY_1",
  "created_at": null,
  "updated_at": null,
  "extensiontable_itc": {
    "id": 1,
    "coretable_id": 1,
    "description": "EXTENSION_iTC_1",
    "created_at": null,
    "updated_at": null
  },
  "extensiontable_sysops": {
    "ID": 1,
    "coretable_id": 1,
    "description": "EXTENSION_SYSOPS_1"
  }
}, {
  "id": 2,
  "Internal_key": "TESTKEY_2",
  "created_at": null,
  "updated_at": null,
  "extensiontable_itc": {
    "id": 4,
    "coretable_id": 2,
    "description": "EXTENSION_ITC_2",
    "created_at": null,
    "updated_at": null
  },
  "extensiontable_sysops": {
    "ID": 2,
    "coretable_id": 2,
    "description": "EXTENSION_SYSOPS_2"
  }
}, {
  "id": 3,
  "Internal_key": "TESTKEY_3",
  "created_at": null,
  "updated_at": null,
  "extensiontable_itc": {
    "id": 5,
    "coretable_id": 3,
    "description": "EXTENSION_ITC_3",
    "created_at": null,
    "updated_at": null
  },
  "extensiontable_sysops": {
    "ID": 3,
    "coretable_id": 3,
    "description": "EXTENSION_SYSOPS_3"
  }
}, {
  "id": 4,
  "Internal_key": "TESTKEY_4",
  "created_at": null,
  "updated_at": null,
  "extensiontable_itc": {
    "id": 6,
    "coretable_id": 4,
    "description": "EXTENSION_ITC_4",
    "created_at": null,
    "updated_at": null
  },
  "extensiontable_sysops": {
    "ID": 4,
    "coretable_id": 4,
    "description": "EXTENSION_SYSOPS_4"
  }
}, {
  "id": 5,
  "Internal_key": "TESTKEY_5",
  "created_at": null,
  "updated_at": null,
  "extensiontable_itc": {
    "id": 7,
    "coretable_id": 5,
    "description": "EXTENSION_ITC_5",
    "created_at": null,
    "updated_at": null
  },
  "extensiontable_sysops": {
    "ID": 5,
    "coretable_id": 5,
    "description": "EXTENSION_SYSOPS_5"
  }
}]

Как вы можете видеть, записи, ссылающиеся на соответствующие Записи на coretable помещаются в массив, который сам становится элементом общего массива, содержащего данные из coretable.

Теперь я хочу получить ВСЕ эти данные, КРОМЕ для:

Идентификаторы из coretable

Созданный_at / updated_at

внешние ключи / coretable_ids

Я уже работал с методом сбора "pluck ()", но, похоже, он не подходит для цели доступа к этому многоуровневому массиву со всеми этими дубликатами в индексах.

Is Есть ли удобный способ сделать это? Или я должен делать это вручную, используя петли?

1 Ответ

1 голос
/ 03 февраля 2020

https://laravel.com/docs/5.8/eloquent-serialization#hiding -attributes-from- json

Есть два способа скрыть поля. Первый - поместить необходимые поля в массив $hidden внутри класса модели, и все эти поля не будут включены в экземпляр модели. Второе - использовать функцию makehidden. Это позволяет динамически скрывать поля, например, зависеть от некоторых условий.

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