首页 > 解决方案 > 使用 Laravel 将数据作为 json 字符串存储在 nosql 中

问题描述

对于给定的模型,我有Post model一个$fillable属性,我在其中定义了一个列表,如下所示:

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

由于某些原因,在用户界面中,有一些自定义字段我想存储string在“输入”属性中。这是我的控制器:

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

但问题是,对于属性input,希望它的值是 a json string,因为有一些自定义字段和数据也将来自,form并且它们的所有名称都将以input_like 为前缀,例如:input_body,input_slug,input_title。但我没有定义模型,所以我想做的是在控制器中从它们创建一个配对键值,结构如下:

[
    custom_field_name1=>value1,
    custom_field_name2=>value2
]

但是那里的名称将取决于创建它们的用户,我不知道如何拥有控制器如何自动识别它们以创建上面的数组。然后将它们转换为 ajson string以将它们存储在input属性中。

标签: phplaravellaravel-5neo4jnosql

解决方案


在Mysql中这样做

首先使用->json()方法将输入字段字符串更新为迁移中的json字段

 $table->json('inputs');

添加迁移后添加Post模型

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

将列输入转换为数组后,自动将数据存储在 json 数组中并检索

有关更多详细信息,请参见

在 nosql 中这样做

 add this line in `Post` Model

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

仅将字段转换为数组,请参见


推荐阅读