Reputation: 13
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
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