Коллекция Laravel: сорвать перед сериализацией - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть модель laravel с отношением один ко многим, которую пользователь может редактировать с помощью тега множественного выбора.

Прежде чем экспортировать модель в виде JSON, я использую метод «pluck», чтобы получить массив связанных идентификаторов вместо массива моделей, чтобы их можно было использовать в теге select, а затем снова синхронизировать с «» Синхронный метод Ларавела.

Однако результат "pluck ()", по-видимому, не сохраняется после сериализации. Следующий код не работает - при сериализации «отношение» снова становится массивом объектов -

$model->relationship = $model->relationship->pluck('id');

Этот, однако, делает то, что должен: somePropertyIHaveJustCameUpWith является массивом идентификаторов

$model->somePropertyIHaveJustCameUpWith = $model->relationship->pluck('id');

1) Почему это происходит?

2) Я видел, что этот способ ресурсов описан в документации, но создание целого нового класса для чего-то, что может быть решено с помощью одной строки кода, кажется немного излишним. Нет ли более чистого способа сделать это?

1 Ответ

0 голосов
/ 07 ноября 2018

Я думаю, что это, вероятно, результат того, как модель реализует toArray () .

Вы можете отслеживать предпринятые шаги, но в конечном итоге отношения считываются из свойства $this->relations в Модели, а не из каждого отдельного отношения.

Таким образом, вместо установки значения вашего отношения напрямую, например:

$model->relationship = $newValue

... вы можете попробовать установить его, используя:

$model->setRelation('relationship',$newValue)

Это обновит свойство $model->relations.

Это должно позволить методу toArray() получить новое значение, которое вы задали при сериализации.

Обратите внимание, что метод toJson() в свою очередь вызывает метод toArray() при сериализации. Таким образом, любой подход будет иметь одинаковый результат.

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