Illuminate\Database\Grammar::parameterize():参数 #1 ($values) 必须是数组类型,给定站点的字符串:stackoverflow.com

问题描述 投票:0回答:1

我尝试用 eloquent 将数据保存在 json 中,但遇到了这个问题,我不知道为什么会收到此错误。

======================我的控制器======================

public function facture_save(Request $request)
{
    $input = [
        'facture_json' => [
            '1' => 'One',
            '2' => 'Two',
            '3' => 'Three'
        ]
    ];

    $item = Facture::create($input);

    dd($item->data);

}

======================我的桌子======================

facture(id,facture_json) 其中facture_json是长文本数据格式。

======================我的模型======================

protected $fillable = [
    'facture_json' 
]; 

/**
 * Get the user's first name.
 *
 * @return \Illuminate\Database\Eloquent\Casts\Attribute
 */
protected function data(): Attribute
{
    return Attribute::make(
        get: fn ($value) => json_decode($value, true),
        set: fn ($value) => json_encode($value),
    );
} 
mysql laravel eloquent
1个回答
0
投票

属性函数的名称必须与您要使用的字段的名称相对应;就你而言,

facture_json

protected function facture_json(): Attribute

然而,这一切完全没有必要。删除属性函数,并通过强制转换告诉 Eloquent 该列存储 JSON 数据:

protected $casts = [ 'facture_json' => 'array', ];
它将为您处理 

json_encode

 / 
json_decode

© www.soinside.com 2019 - 2024. All rights reserved.