2017-04-12 132 views
0

我有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行。

回答

0

使用Laravel $使人对你的模型see here参数:

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

Laravel内部管理* cast *字段,并从表格中获取JSON作为PHP Array,并将PHP Array存储为Json,但是在迁移文件中请确保字段类型是文本。 –

0

如果你有在你的地址过滤器,然后它在不同的地方强烈建议,以使它们在单独的列,即使他们需要修改在你的应用程序。

而通过过滤器我的意思是过滤结果,同时使查询像你想要得到的行,其中area是10等等。

但如果你是在过滤数据的自由从数据库检索后,那么你可以很好的使用的数据类型text存储在数据库中的JSON字符串,并从数据库中检索之后,使json_decode和过滤出来。

当您在分页结果而不是显示找到结果的总数时,最后一种情况实际上是有益的。

在这种情况下,您可以每10行查询一次数据库(或者您希望每页显示的任意数量的结果),然后在检索后对其进行过滤,如果达不到极限,则可以获取更多数据。跟踪进一步查询的偏移量。

相关问题