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