PHP изменить значение свойства объекта в массиве объектов - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть пользовательская модель со столбцом profile_details, в котором содержится json_encoded объект информации о профиле пользователя. Объект выглядит так, как показано ниже

$user->profile_details: {
   'name' : 'Wayne', 
    'books' : [
        { id: 1, title : 'Rich Dad' ,  isbn: 9780},
       { id: 3, title : 'Business school' ,  isbn: 8891} 
        ] 
}

Как изменить значение свойства 'id' массива books после извлечения модели пользователя из базы данных.

Ниже я попробовал.

$user =User::find(1);
$newBooks = array();

if($user) {

    $profile_details_decoded = json_decode($user->profile_details) ;
    foreach($profile_details_decoded->books as $book) {
     $book->id = 28;
      array_push($newBooks, $book);
} 

$user->profile_details->books = $newBooks;

}

dd($user->profile_details->books);

Я ожидал, что массив $newBooks заменит массив $user->profile_details->books.

Пожалуйста, кто-то должен помочь мне. Спасибо.

1 Ответ

1 голос
/ 30 апреля 2020

Поскольку profile_details содержит данные, кодированные json_enco, вам нужно работать с копией массива и полностью присвоить массив столбцу.

    $profile_details_decoded = json_decode($user->profile_details);
    $newBooks = [];
    foreach($user->profile_details->books as $book) {
        $book->id = 28; // whatever logic you want fpr changing id
        $newBooks[] = $book;
    } 
    $profile_details_decoded->books = $newBooks
    $user->profile_details = $profile_details_decoded;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...