当前位置: 首页 > 知识库问答 >
问题:

如何使用Laravel Elount在数据库中保存JSON响应,我得到一个错误“数组到字符串转换”

慕容修伟
2023-03-14

我试图保存一个JSON(字符串)与雄辩到数据库,但我得到一个错误:数组到字符串转换

我试着在我的模型中添加:

protected$casts=['payload'=

或者

protected$casts=['payload'=

但是它不起作用!

控制器



    try{
        if( $type == 'b2c'){
            $searchEnquiry = B2CSearchEnquiry::find($enquiryID);
            $data = $this->searchInDataSource($searchEnquiry);

            $repuveConsult = new B2cRepuveConsult;
            $repuveConsult->search_enquiry_id = $enquiryID;
            $repuveConsult->payload = (string)$data;
            $repuveConsult->saveOrFail();
        }
    }catch(\Exception $e){
        return $e->getMessage();
    }

模型



    class B2cRepuveConsult extends Model
    {
        protected $table = ['b2c_repuve_consults'];
        protected $fillable = ['search_enquiry_id','information'];
        protected $casts = [
            'information' => 'array',
        ];
    }

迁移




    public function up()
        {
            Schema::create('b2c_repuve_consults', function (Blueprint $table) {
                $table->increments('id');
                $table->integer('search_enquiry_id')->unsigned();
                $table->longText('payload')->nullable();
                $table->timestamps();
            });

            Schema::table('b2c_repuve_consults', function($table) {
                $table->foreign('search_enquiry_id')
                    ->references('id')
                    ->on('b2c_search_enquiries')
                    ->onDelete('cascade');
            });
        }

原始查询工作,但不是一个好的做法,因为我使用Laravel


      DB::insert('insert into b2c_repuve_consults (search_enquiry_id,payload) values (?, ?)', [$enquiryID, $data]);


共有1个答案

长孙阳嘉
2023-03-14

我假设您已经在视图文件中放置了“payload_Array[]”来获取数组,或者您以某种方式在create方法中创建了数组。

B2cRepuveConsult::create([
  '....'       => '....',
  'payload'  => json_encode($request->get('payload_Array')); // This is how you save json
  '....'       => '....',
]);

参考:https://www.php.net/manual/en/function.json-encode.php

从你的代码

try{
        if( $type == 'b2c'){
            $searchEnquiry = B2CSearchEnquiry::find($enquiryID);
            $data = $this->searchInDataSource($searchEnquiry);

            $repuveConsult = new B2cRepuveConsult;
            $repuveConsult->search_enquiry_id = $enquiryID;
            $repuveConsult->payload = json_encode($data); // update this
            $repuveConsult->saveOrFail();
        }
    }catch(\Exception $e){
        return $e->getMessage();
    }
 类似资料:
  • 我有一个通过ORM保存到数据库的对象。对象有一个字符串数组,每个对象的数组长度可以不同。我想知道在db中存储字符串数组的标准做法(例如,我是否应该将所有字符串存储在一个字段中作为csv等)?

  • Java MySQL数据库我正在做一个项目,将一个路径名为“C:\Desktop\”的字符串保存到数据库中。我已经创建了一个实体类来将此路径名更新到数据库中,在javaeclipse中,当我运行程序时,它会显示路径以这种格式存储在数据库中,即“C:\Desktop\”,但在该路径的数据库列中,它只存储“C:Desktop”,没有“\”

  • 这是一个Lua脚本,用于Corona SDK中的一个游戏。一开始(旧代码)效率很低,我不得不手动创建每道数学题,在其他人的帮助下(新代码),所以我得到了答案。 在控制台中,我现在看到了这个错误:

  • 我最近安装了wildfly-10.0.0.final。为了让我的脚湿透,我创建了一个不需要数据库连接的基本EJB。由于某些原因,当我试图部署EJB时,我得到以下错误: 无法上载部署:{“wflyctl0080:Failed Services”=>{“jboss.deployment.unit.\”javaee_wildfly1.jar\“.FIRST_MODULE_USE”=>“org.jboss

  • 我的要求是,我有一个应用程序,它将错误保存到数据库中,以我自己的方式从仪表板查看以后的时间。因此,我想把发生的错误转换成与错误显示控制台相同的字符串。我可以从错误对象中得到消息或其他东西。但这不是我想要的。我想预览java控制台显示的错误。

  • 我是Room数据库的新手,我有来自MSGraph API的JSON响应,这是日历事件的列表。 我想将此响应存储在Room数据库中。 来自改型数据的示例响应 我搜索了论坛,但没有得到任何正确的解决方案。我想将此响应存储在Room数据库中。谁能帮我找到正确的方法。 谢谢