Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 存储动态数组和字符串_Php_Mysql_Laravel - Fatal编程技术网

Php 存储动态数组和字符串

Php 存储动态数组和字符串,php,mysql,laravel,Php,Mysql,Laravel,我有一个网站,用户可以在其中转换文本文档并将其保存到我所称的字段中。一个文本文档可以有动态数量的字段,因此我很难创建关系数据库设计 考虑下面的设置 My model Field.php的字段如下表所示 我还有一个表,用于保存特定文档的字段结果: 在模型结果中,我有一个$casts类型: 受保护的$casts=[ '内容'=>'数组' ]; 这是我的结果表: 表中的数据只是从.json文件中读取的 现在,当在我的数据库中输入特定文档(本例中为32)的所有字段时,我希望发送一个带有字段数据的webh

我有一个网站,用户可以在其中转换文本文档并将其保存到我所称的字段中。一个文本文档可以有动态数量的字段,因此我很难创建关系数据库设计

考虑下面的设置

My model Field.php的字段如下表所示

我还有一个表,用于保存特定文档的字段结果:

在模型结果中,我有一个$casts类型:

受保护的$casts=[ '内容'=>'数组' ]; 这是我的结果表:

表中的数据只是从.json文件中读取的

现在,当在我的数据库中输入特定文档(本例中为32)的所有字段时,我希望发送一个带有字段数据的webhook,例如:

{
  "invoice_no":"#81724",
  "addresses": [{
       "0": "Parkway",
       "1": "Broadway"
   },{
       "0": "Avenue St.",
       "1": "Main St."
   }]
}
以上就是我的设想——但我不确定这是否是最好的方法

my Model上的$cast以数组的形式返回内容,但正如您看到的results.content一样,它可以是字符串也可以是数组。 我应该如何在数据库中存储内容?如果我还想存储字符串,我就不能将列设置为JSON类型。 另一种方法? 在结果表中为内容设置两列是否更有意义,因此将变为:

id |字段| id |文档| id |文本|数组 ----------------------- 1 | 1 | 32 | 81724 |空 2 | 2 | 32 |空|[{0:Parkway,1:Broadway},{0:Avenue St.,1:Main St.}]
到目前为止,最简单、最丑陋的方法是向数据库表中添加一个BLOB列,并将JSON存储在其中

您可以做的是将表中的结果作为数组发送到后端,并在输入字段的名称上使用[]进行处理


请发布您是如何从表中获取数据的,这样我可以进一步帮助您,并且有人可能会告诉您如何使其工作。

第一种方法很好,您需要覆盖getCastType方法,如下面问题的答案所述。所以你可以采用不同的类型。因为字段数据类型取决于最大预期长度,所以它可以是Varchar或Text,前提是存储在此字段中的所有数据类型都是基于文本的

更新: 假设您需要两种类型string和table,并且希望将表类型转换为array,则可以按如下方式重写getCastType方法:

protected function getCastType($key) {
      if ($key == 'content' && !empty($this->field->type)) {
        switch($this->field->type) {
            case 'table':
                return 'array';
            break;
            case 'string':
                return 'string';
            break;
            default:
                return parent::getCastType($key);
        }
      } else {
        return parent::getCastType($key);
      }
    }
public function field() {
    return $this->belongsTo('App\Field');
}
为了能够使用$this->field->type访问字段类型,您需要在结果模型中实现如下关系:

protected function getCastType($key) {
      if ($key == 'content' && !empty($this->field->type)) {
        switch($this->field->type) {
            case 'table':
                return 'array';
            break;
            case 'string':
                return 'string';
            break;
            default:
                return parent::getCastType($key);
        }
      } else {
        return parent::getCastType($key);
      }
    }
public function field() {
    return $this->belongsTo('App\Field');
}

所有最好的

更新了我的问题-字符串和文本的数据都来自.json文件。因此,对于每个字段,我读取json文件的内容,并将内容保存到数据库中。如果需要,我可以更改json文件的结构/内容。感谢您的链接-我不知道您可以动态设置强制类型。如果$field->type==='table',那么强制转换应该是数组,如果不是,那么它应该是字符串,这是一个选项吗?我很乐意,你可以说$field->type=='table',那么强制转换应该是数组