如何在数据库中存储地址?

时间:2017-04-12 10:42:06

标签: mysql laravel

我有laravel应用程序,用户可以选择地址

area
region
city
locality
street

每个字段都是简单整数(表的外键,包含所有具有父子关系的地址)。例如,区域test有8个regions和2个cities

我想将此信息存储在mysql数据库中,但存在一些问题。

有很多代码可以正常工作并处理所有模型的所有更新(存储有关更改差异的内容的信息)。

如果我存储5个不同列的这些字段,那么我必须在应用程序的不同部分添加一些代码来处理它(select,update,show),因为这段代码依赖于字段类型(text,integer,select,等,有单独的配置描述这些列。)

我想将它存储在json列中,就像这样

{"area": 10, "city": 335}

然后我可以轻松添加新的columns,但是这个解决方案的速度如何,因为这些字段将在过滤器中使用,表格中至少有50k行。

2 个答案:

答案 0 :(得分:0)

在模型see here上使用Laravel $ casts 参数:

protected $casts = [
    'address' => 'array',
];

$record = SomeModel::find(1);

// $address is an array...
$address = $record->options;

// address is automatically serialized back to JSON...
$user->address = ["area" => 10, "city" => 335];

答案 1 :(得分:0)

如果您的地址有过滤器,那么强烈建议您将它们放在不同的列中,即使它们需要在应用程序的不同位置进行修改。

通过过滤器,我的意思是过滤结果,同时进行查询,就像你想获得area为10的行,依此类推。

虽然如果您在从数据库中检索后可以自由地过滤数据,那么您可以很好地使用数据类型text将json字符串存储在数据库中,并在从数据库中检索它之后,生成json_decode并过滤它进行。

如果您在分页中没有显示已找到结果的总数,那么最后一个案例实际上是有益的。

在这种情况下,您可以查询数据库中每10行(或每页显示的任何数量的结果),检索后过滤它们,如果不符合限制则再获取更多。跟踪偏移以进一步查询。

相关问题