postgresql Laravel在将数组存储到Json数据库字段时获得“数组到字符串转换”

sbdsn5lh  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(4)|浏览(149)

我正在尝试保存一个带有选项的数组到我的postgres数据库的json数据字段中。我正在使用Laravel 5.5,我正在使用“dimsav/laravel-translatable”扩展进行翻译。
我的模型问题看起来像这样:命名空间应用程序;

use Illuminate\Database\Eloquent\Model;
use Dimsav\Translatable\Translatable;

class Question extends Model
{
    use Translatable;
    public $translatedAttributes = ['options', 'answer'];

    protected $casts = [
        'options' => 'array'
    ];
}

字符串
模型翻译看起来像这样:

namespace App;

use Illuminate\Database\Eloquent\Model;

class QuestionTranslation extends Model
{

public $timestamps = false;
public $fillable = ['options', 'answer'];


}
以及在BSController中的store操作:

public function store(Request $request)
{
    $question = new Question();

    $options[1] = "test1";
    $options[2] = "test2";

    $question->answer = 1;
    $question->options = $options;

    $question->save();

}


当我试图存储这些数据时,我得到了错误:

Illuminate \ Database \ QueryException
Array to string conversion (SQL: insert into "question_translations" ("locale", "answer", "options", "question_id") values (en, 1, test1, 18) returning "id")


当我自己使用json_encode强制转换$options时,我可以毫无问题地存储它。
你有什么想法,为什么laravel铸造不工作?也许是因为可翻译的扩展?

ipakzgxi

ipakzgxi1#

在您的问题模型中尝试此protected $casts = [ 'options' => 'json']

6mw9ycah

6mw9ycah2#

使用json_encode

public function store(Request $request)
{
    $question = new Question();

    $options[1] = "test1";
    $options[2] = "test2";

    $question->answer = 1;
    $question->options = json_encode($options);//json_encode

    $question->save();

}

字符串

alen0pnh

alen0pnh3#

可以尝试使用这个:

protected $casts = [
    'options' => 'json',
];

字符串
我在MySQL上测试了它,但理论上它也应该在PostgreSQL上工作。

相关问题