Laravel 5.6 Объект класса stdClass не может быть преобразован в строку при обновлении значения базы данных - PullRequest
0 голосов
/ 08 января 2019

Обратите внимание, что это не дубликат этого или этого У меня есть страница модели с полем json, которая называется options. в моей модели страницы я добавил параметры атрибута в переменную $cast и в переменную $fillable. Тогда у меня есть функция pageOptions (), которая должна возвращать класс PageOptions, например:

/*
 *@return pageOptions
 */
 public function pageOptions() : PageOption
{
   $options = ($this->options) ? ($this->options) : [];
    return new PageOption($options, $this);
}

класс параметров страницы просто предоставляет функции set () и get (), чтобы разрешить мне устанавливать и получать данные json из поля параметров. метод set () просто устанавливает данные в переменную $ options, а затем вызывает метод persist, который помещает данные в поле options в базе данных.

 /**
     * Persist the options.
     *
     * @return mixed
     */
    protected function persist()
    {
        return $this->model->update(['options' => $this->options]);
    }

Instead

я получаю эту ошибку

Объект класса stdClass не может быть преобразован в строку

Я не пытаюсь отобразить какой-либо объект или массив в любом месте моего кода, поэтому я не могу понять, откуда возникла ошибка. , Я попытался json_encode переменная параметров вручную в методе persist (), но я все еще получаю ту же ошибку. Я также попытался добавить магический метод TOString() на страницы и классы PageOptions, например,

public function __toString()
     {
      return $this->name;
     }

но все равно не решает.

1 Ответ

0 голосов
/ 08 января 2019

Вы должны использовать свойство $casts в модели.

protected $casts = [
    'options' => 'array'
];

Из документов :

Тип приведения массива особенно полезен при работе со столбцами. которые хранятся как сериализованный JSON. Например, если ваша база данных имеет тип поля JSON или TEXT, который содержит сериализованный JSON, добавление массива, приведенного к этому атрибуту, автоматически десериализует атрибут в массив PHP при доступе к нему в вашей модели Eloquent.

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