Вставка Laravel и обновление до JSON не работает - PullRequest
0 голосов
/ 30 сентября 2018

Не могу понять, почему поле JSON игнорируется.

Этот не работает:

Registries::create([
    'nr' => $old_document->no,
    'metas->name' => 'r01',
]);

В модели я установил:

protected $casts = [
        'metas' => 'array',
    ];

И:

protected $fillable = [
        'nr',
        'metas'
    ];

Я думаюпроблема в приведении атрибутов, потому что этот работает:

Registries::create([
    'nr' => $old_document->no,
    'metas' => json_encode(['name'=>'r01']),
]);

Я не получаю никаких ошибок, просто столбец JSON остается пустым.

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Я не поклонник приведения атрибутов в реляционных базах данных.

Так что это только мое предположение, основанное на документации о array.

Тип приведения массива особенно полезенпри работе со столбцами, которые хранятся в виде сериализованного JSON.

Вы пытаетесь поместить ассоциативный массив, который для JSON является объектом.

Я мог бы догадаться, что это ошибка.

Так что попробуйте типизировать его навставьте:

Registries::create([
    'nr' => $old_document->no,
    'metas' => (object)['name'=>'r01'],
]);

приведение атрибута

и сделайте его объектом:

protected $casts = [
    'metas' => 'object',
];
0 голосов
/ 30 сентября 2018

Итак, $metas->name работает только для обновления, в моем случае мне нужно вставить вот так:

Registries::create([
    'nr' => $old_document->no,
    'metas' => ['name'=>'r01']
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...