Laravel口才保存不会保存

时间:2019-10-08 12:21:21

标签: laravel api eloquent

由于某些未知原因,我试图将调查答案保存在数据库中-> 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一起发送的所有内容。这只会导致错误:数组到字符串的转换。

非常感谢您的帮助

2 个答案:

答案 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在评论中指出,但肯定有更好的存储方式。