在列文本类型上保存数组

时间:2017-02-01 17:44:51

标签: php laravel laravel-5

尝试在php修补程序中保存记录后出现错误

  Illuminate\Database\QueryException with message 'PHP error:  Array to string conversion ...vendor\laravel\framework\src\Illuminate\Database\MySqlConnection.php on line 80

因为我的阵列在"选项"而抱怨财产,我做错了什么?

我的记录:

=> App\Question {#690
         survey_id: 1,
         label: "what services need",
         input_type: "checkbox",
         required: true,
         options: [
           "Tlevision",
           "Internet ",
           "Phone",
           "Mobile",
         ],
         order: 1,
         updated_at: "2017-02-01 17:34:28",
         created_at: "2017-02-01 17:34:28",
       }

在Tinker中,基本上在我使用的选项字段中:

$ info-> options = [" title 1"," title 2" ..]

1 个答案:

答案 0 :(得分:1)

选项1

我想最好的选择是使用casting

  

在处理存储为序列化JSON的列时,数组强制转换类型特别有用。例如,如果您的数据库具有包含序列化JSON的JSON或TEXT字段类型,则在您的Eloquent模型上访问该属性时,将该属性添加到该属性将自动将该属性反序列化为PHP数组:

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

定义了强制转换后,您可以访问options属性,它将自动从JSON反序列化为PHP数组。设置options属性的值时,给定的数组将自动序列化为JSON以进行存储。

选项2

创建accessor以自动序列化,并创建mutator以反序列化数据。

选项3

手动序列化options,例如:

Model::create([
    ....
    'options' => json_encode($options),
    'order' => 1
]);

当您从DB获取此属性时,请手动反序列化:

$options = json_decode($result->options, true);