【问题标题】:Laravel : How to store json format data in database?Laravel:如何在数据库中存储 json 格式的数据?
【发布时间】:2016-10-14 15:59:59
【问题描述】:

我想从给定数组中将一些 json 格式的数据存储在数据库中。但是我如何使用控制器存储它。

假设我有像这样的 json 数据:

{"id":"bangladesh","divisions":[{"name":"Barisal"},{"name":"Chittagong"},{"name":"Dhaka"},{"name":"Khulna"},{"name":"Rajshahi"},{"name":"Rangpur"},{"name":"Sylhet"}]}

据我所知,在控制器中使用 json 格式是这样的,因为我并不完全了解它。

public function saveUser(Request $request)
{
    $div=new Div();
    $user->json = json_encode( array({"Date 1": {
        {"id":"bangladesh","divisions":[{"name":"Barisal"},{"name":"Chittagong"},{"name":"Dhaka"},{"name":"Khulna"},{"name":"Rajshahi"},{"name":"Rangpur"},{"name":"Sylhet"}]}   
    $div->save();    
    return redirect('getList');
}

如何使用 Laravel 控制器将其仅保存在 mySQL 中的分区模型中的分区列表?

【问题讨论】:

标签: php mysql json laravel


【解决方案1】:

设置你的模型

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

这是完整的代码。

/**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'primary_id', 
        'list'
    ];


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

    public function setMetaAttribute($value)
    {
        $list = [];

        foreach ($value as $array_item) {
            if (!is_null($array_item['key'])) {
                $list[] = $array_item;
            }
        }

        $this->attributes['list'] = json_encode($list);
    }

【讨论】:

    【解决方案2】:

    您可以将模型转换为 JSON 格式,例如 $model->toJson();

    如果数组中有数据,可以使用json_encode(['id' => 1, 'name' => 'User 1']);

    Laravel Schema 也支持 JSON 字段类型,请看https://laravel.com/docs/5.0/schema#adding-columns

    您也可以使用 text 字段类型来存储 JSON 数据。

    【讨论】:

    • 确认,我刚刚将一个 <textarea> Vue 组件转换为富文本编辑器 (vue-tiptap),并将 JSON 字形存储到现有的 notes 字段中,即文本类型:$table->text('notes')->nullable();。我只是在这里寻找可能更好的替代品。
    【解决方案3】:

    您不需要自己将数组数据转换为 JSON 字符串,在您的模型上使用 Laravel $casts 参数:https://laravel.com/docs/5.2/eloquent-mutators#attribute-casting

    你应该在你的 Div 模型中做这样的事情:

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

    【讨论】:

    • 澄清一下!如何设置$options['key'] = 'value';
    • 这里的数组表示在数组中准备键值对,如array('key' =>'value')
    猜你喜欢
    • 2020-05-20
    • 1970-01-01
    • 2015-12-18
    • 2021-06-10
    • 2021-03-12
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多