ReCatCoder
ReCatCoder

Reputation: 13

How to save a JSON response in Database with Laravel Eloquent, I'm getting an error "Array to string conversion"

** Error: "Array to string conversion" **

I'm trying to save a JSON(string) with Eloquent into the database but I'm getting an error: "Array to string conversion"

I try to add in my model:

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

or

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

but is not working!

Controller


    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();
    }

Model


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

Migration



    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');
            });
        }

A raw query works but is not a good practice since I'm using Laravel

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

Upvotes: 0

Views: 2256

Answers (1)

Vipertecpro
Vipertecpro

Reputation: 3284

I assumed that you've put "payload_Array[]" in view file to get the array or somehow you create array in create method.

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

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

From you're code

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();
    }

Upvotes: 0

Related Questions