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

Posted

技术标签:

【中文标题】如何使用 Laravel Eloquent 在数据库中保存 JSON 响应,我收到错误“数组到字符串转换”【英文标题】:How to save a JSON response in Database with Laravel Eloquent, I'm getting an error "Array to string conversion" 【发布时间】:2019-11-02 13:39:21 【问题描述】:

** 错误:“数组到字符串的转换”**

我正在尝试将带有 Eloquent 的 JSON(字符串)保存到数据库中,但是 我收到一个错误:“数组到字符串的转换”

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

protected $casts = ['payload' => 'array'];

protected $casts = ['payload' => 'json'];

但不工作!

控制器

尝试 如果($类型=='b2c') $searchEnquiry = B2CSearchEnquiry::find($enquiryID); $data = $this->searchInDataSource($searchEnquiry); $repuveConsult = 新的 B2cRepuveConsult; $repuveConsult->search_enquiry_id = $enquiryID; $repuveConsult->payload = (string)$data; $repuveConsult->saveOrFail(); catch(\异常 $e) 返回 $e->getMessage();

型号

B2cRepuveConsult 类扩展模型 受保护的 $table = ['b2c_repuve_consults']; protected $fillable = ['search_enquiry_id','信息']; 受保护的 $casts = [ '信息' => '数组', ];

迁移

公共函数 up() Schema::create('b2c_repuve_consults', function (Blueprint $table) $table->increments('id'); $table->integer('search_enquiry_id')->unsigned(); $table->longText('payload')->nullable(); $table->timestamps(); ); 架构::table('b2c_repuve_consults', function($table) $table->foreign('search_enquiry_id') ->参考('id') ->on('b2c_search_enquiries') ->onDelete('级联'); );

原始查询有效,但不是一个好习惯,因为我使用的是 Laravel

DB::insert('插入 b2c_repuve_consults (search_enquiry_id,payload) 值 (?, ?)', [$enquiryID, $data]);

【问题讨论】:

【参考方案1】:

我假设您已将 "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();
    

【讨论】:

以上是关于如何使用 Laravel Eloquent 在数据库中保存 JSON 响应,我收到错误“数组到字符串转换”的主要内容,如果未能解决你的问题,请参考以下文章

Payum - Laravel 4 的包。如何使用 Eloquent 而不是 FilesystemStorage 创建模型数据?

如何在 laravel 的 eloquent 中转换表列数据?

如何在 Laravel/Eloquent 中获得完整的关系

如何在 Laravel Eloquent ORM 中获取插入的多行数据

如何使用 Laravel Eloquent 在不同服务器上的多个数据库之间执行连接查询?

如何在不使用Eloquent ORM时构建Laravel应用程序