сохранить данные в виде строки JSON в Nosql, используя Laravel - PullRequest
2 голосов
/ 25 мая 2019

для данной модели у меня есть атрибут Post model a $fillable, где я определил список атрибутов, как этот:

protected $fillable = [
        'title',
        'slug',
        'body',
        'type',
        'status',
        'inputs',
    ];

В пользовательском интерфейсе по некоторым причинам есть некоторые настраиваемые поля, которые я хотел бы сохранить как string в attrbute «входов». Вот мой контроллер:

public function store(StorePost $request){
    $data=$request->validate();
    $p=Post::create($data);
    return response()->json(PostResource::collection($p)); 
}

Но дело в том, что для атрибута input его значение должно быть равно json string, поскольку существуют некоторые настраиваемые поля, и данные также будут поступать из form, и все их имена будут иметь префикс input_ как, например: input_body,input_slug,input_title. Но я не определен в модели, поэтому я хотел бы создать из них значение paire-key в контроллере в следующей структуре:

[
    custom_field_name1=>value1,
    custom_field_name2=>value2
]

Но имена там будут зависеть от пользователя, который их создаст, я не знаю, как иметь контроллер, который может автоматически их идентифицировать, чтобы создать массив выше. Затем он преобразует их в json string, чтобы сохранить их в атрибут input.

1 Ответ

1 голос
/ 25 мая 2019

В Mysql так делать

в первую очередь обновите строку входного поля в поле json при миграции, используя ->json() метод

 $table->json('inputs');

после добавления добавить добавить в Post Модель

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

после того, как вы ввели столбцы в массив, автоматически сохраните данные в json массив и получить

для более подробной информации см.

IN nosql сделать так

 add this line in `Post` Model

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

приведение только поля в массив см.

...