PHP - Laravel, возвращающий строку вместо массива (JSON) - PullRequest
1 голос
/ 20 мая 2019

У меня есть модель с именем CroppedDocumentField, у которой ниже $casts setup:

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

Миграция выглядит следующим образом:

Schema::create('cropped_document_fields', function(Blueprint $table){
      $table->increments('id');
      $table->unsignedInteger('document_id');
      $table->json('content')->nullable();
});

В моей базе данных контентКажется, что столбец хранится в виде строки:

"{\"1\": [{\"row\": \"Bill Tc\\n\"}, {\"row\": \"Nathar\\n\"}, {\"row\": \"75839\\n\"}]}"

Если я повторю это:

$document = CroppedDocumentField::Find(56);
dd(is_array($document->content));

Это возвращает ложь.

Когда я вставляю JSON в мойбазу данных, я читаю его из файла .txt, который содержит строку JSON:

{"1": [{"row": "Bill Tc\n"}, {"row": "Nathar\n"}, {"row": "75839\n"}]}

Затем я вставляю это:

$file = "mytext.txt";
$content = file_get_contents($file);

//Add the text content
$this->document->cropped()->create([
     'content' => $content
]);

В моей модели документа у меня просто есть связьк CroppedDocumentField модели:

//Document.php:
public function cropped()
{
    return $this->hasMany(CroppedDocumentField::class);
}

Что я здесь не так делаю?

1 Ответ

1 голос
/ 20 мая 2019

Я попытался привести json к массиву в моем проекте, и это сработало, как и ожидалось, но я считаю, что проблема в том, как вы храните контент. Пожалуйста, попробуйте изменить это и дайте мне знать:

//Add the text content
$this->document->cropped()->create([
     'content' => json_decode($content) // convert string to json
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...