PHP-Laravel返回字符串而不是数组(JSON)

时间:2019-05-20 08:14:35

标签: php laravel

我有一个名为CroppedDocumentField的模型,其设置低于$casts

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

这将返回false。

当我将JSON插入数据库时​​,我从包含JSON字符串的.txt文件中读取该文件:

{"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 个答案:

答案 0 :(得分:1)

我尝试将json强制转换为项目上的数组,并且按预期方式工作,我认为问题在于您存储内容的方式。请尝试将其更改为此,并告诉我:

//Add the text content
$this->document->cropped()->create([
     'content' => json_decode($content) // convert string to json
]);