Laravel $ collection-> key = "value" не работает - PullRequest
0 голосов
/ 26 мая 2020

Следующий код не работает в Laravel 7.

$collection = collect();
$collection->key = "value"
Log::debug($collection) // returns empty array []

Но этот код работает.

$user = Auth::user();
$user->key = "value" 

Если я правильно понимаю, Auth::user() также должен возвращать Коллекция. Почему первый не работает, а второй работает?

Использование декодированного объекта JSON также работает

$object = json_decode($data);
$object->key = "value"

Он работает, если вы используете $collection->put('key', 'value'), но Мне любопытно, почему первый способ не работает.

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

В первую очередь вы пытаетесь извлечь одно значение из коллекции. Вам нужно добавить объект в коллекцию, а затем присвоить этому объекту значение, чтобы он работал.

Второй пример:

$user = Auth::user();
$user->key = "value" 

работает, потому что $user - это отдельный объект. Это эквивалентно тому, что вы можете получить от директивы first() или find($id) - отдельный объект, который будет принимать значение, а не коллекцию, которая не будет.

Вы можете создать свой собственный объект и добавить ключ вы sh к нему:

$object = new \stdClass();
$object->value = 'Your Value';

Теперь вы можете выполнить дамп до Log со строковой частью: Log :: debug ($ object-> value);

Или как заметьте, Log просто нужна строка, поэтому JSON тоже работает:

Log::debug(json_encode($object))
1 голос
/ 26 мая 2020

Используйте вместо него метод put():

$collection->put('key', 'value');

https://laravel.com/docs/7.x/collections#method -put

Auth :: user () возвращает тип класса модели

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