如何将多个对象保存到MySQL和Laravel中的JSON列

时间:2017-10-17 12:33:12

标签: php mysql json laravel laravel-5.4

我正在使用Laravel 5.4,我遇到一个问题,当我保存一组复选框时,如果我这样保存它只会保存其中一个:

 <label class="checkbox-inline"> {!! Form::checkbox('languages[name]', 'English') !!} English</label><br/>
 <label class="checkbox-inline"> {!! Form::checkbox('languages[name]', 'French') !!} French</label><br/>
 <label class="checkbox-inline"> {!! Form::checkbox('languages[name]', 'Spanish') !!} Spanish</label><br/>

但它给了我一个可行的格式,因为我可以在名字上运行搜索。这里的输出只是我检查过的第一个,但格式如下:

{"name": "English"}

如果我取出[]。

中的数组字段名称
 <label class="checkbox-inline"> {!! Form::checkbox('languages[]', 'English') !!} English</label><br/>
 <label class="checkbox-inline"> {!! Form::checkbox('languages[]', 'French') !!} French</label><br/>
 <label class="checkbox-inline"> {!! Form::checkbox('languages[]', 'Spanish') !!} Spanish</label><br/>

它会保存所有值,但它并没有为我的搜索等提供可行的格式。这里的输出是:

["English", "French"]

我在Laravel中的功能就像这样

        public function store(Request $request)
{
    $data = $request;
    dd($data['languages']);
    $resource = Resource::create([
        'user_id' => auth()->id(),
        'status_id' => $status,
        'title' => $data['title'],
        'languages' => $data['languages'],
    ]);
    return redirect($resource->path());
}

MySQL中名为“languages”的列是JSON类型。

理想情况下,我希望得到类似于{“name”:“English”}的内容,但不仅仅是保存为一个项目,而是保存所有项目。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

<label class="checkbox-inline"> {!! Form::checkbox('languages[][name]', 'English') !!} English</label><br/>
<label class="checkbox-inline"> {!! Form::checkbox('languages[][name]', 'French') !!} French</label><br/>
<label class="checkbox-inline"> {!! Form::checkbox('languages[][name]', 'Spanish') !!} Spanish</label><br/>

它会给你:

"languages" => array [
    0 => array: [
        "name" => "English"
    ],
    1 => array: [
        "name" => "French"
    ],
    2 => array: [
        "name" => "Spanish"
    ]
]