Как сохранить ответ JSON в базе данных с помощью Laravel Eloquent, я получаю сообщение об ошибке «Преобразование массива в строку» - PullRequest
0 голосов
/ 19 июня 2019

** Ошибка: «Преобразование массива в строку» **

Я пытаюсь сохранить JSON (строку) с Eloquent в базу данных, но Я получаю сообщение об ошибке: "Преобразование массива в строку"

Я пытаюсь добавить в мою модель:

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

или

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

но не работает!

Контроллер


    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 Ответ

0 голосов
/ 20 июня 2019

Я предположил, что вы поместили "payload_Array []" в файл вида , чтобы получить массив или каким-либо образом создать массив в методе создания.

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