我正在尝试保存一个带有选项的数组到我的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铸造不工作?也许是因为可翻译的扩展?
4条答案
按热度按时间ipakzgxi1#
在您的问题模型中尝试此
protected $casts = [ 'options' => 'json']
6mw9ycah2#
使用json_encode
字符串
alen0pnh3#
可以尝试使用这个:
字符串
我在MySQL上测试了它,但理论上它也应该在PostgreSQL上工作。
5tmbdcev4#
我在这里得到了帮助:
https://laracasts.com/discuss/channels/laravel/laravel-getting-an-array-to-string-conversion-while-storing-an-array-into-a-json-database-field
使用此解决方案工作