由于某些未知原因,我试图将调查答案保存在数据库中-> save()方法不起作用,-> update()但是起作用。
每次尝试保存时,都会不断出现错误数组到字符串的转换。
无论使用哪种方式,我都使用dd / return / var_dump / print_r来表明它已经完成了这一步。所以现在我知道它可以使用-> save()方法了。
我的控制器:
$array = json_decode($request->getContent(), true);
foreach ($array as $survey) {
$objAns = new Survey_Answer();
$objAns->name = $survey['surveyName'];
$objAns->answers = $survey['answersPerQuestion'];
if($survey['complete'] === true) {
$objAns['complete'] = 1;
} else if($survey['complete'] === false) {
$objAns->complete = 0;
}
$objAns->save();
}
return;
我的模特:
class Survey_Answer extends Model
{
protected $fillable = ['name', 'answers', 'complete'];
}
我的迁移:
public function up()
{
Schema::create('survey__answers', function (Blueprint $table) {
$table->bigIncrements('id');
$table->bigInteger('survey_id')->unsigned()->nullable()->index();
$table->foreign('survey_id')->references('id')->on('surveys')->onDelete('cascade');
$table->string('name');
$table->json('answers');
$table->boolean('complete');
$table->timestamps();
});
}
我希望代码保存与$ request一起发送的所有内容。这只会导致错误:数组到字符串的转换。
非常感谢您的帮助
答案 0 :(得分:1)
我会怀疑$survey['answersPerQuestion']
是一个数组,但是您试图将其存储在json列中。
您可以使用Laravel's Array & JSON Casting将数组转换为json字符串。
在处理列时,数组强制转换类型特别有用 存储为序列化的JSON。例如,如果您的数据库具有 包含序列化JSON的JSON或TEXT字段类型,添加 转换为该属性的数组将自动反序列化 在Eloquent模型上访问PHP数组时将属性赋给它:
您的型号:
class Survey_Answer extends Model
{
protected $fillable = ['name', 'answers', 'complete'];
protected $casts = [
'answers' => 'array',
];
}
定义了强制类型转换后,您可以访问options属性, 会自动从JSON反序列化为PHP数组。什么时候 您设置options属性的值,给定的数组将 自动序列化回JSON以进行存储:
$user = App\User::find(1);
$options = $user->options;
$options['key'] = 'value';
$user->options = $options;
$user->save();
答案 1 :(得分:1)
您需要以json格式而不是数组形式存储$survey['answersPerQuestion']
。
$objAns->answers = json_encode($survey['answersPerQuestion']);
尽管@Lucas Arbex在评论中指出,但肯定有更好的存储方式。