2017-04-12 137 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行查詢一次數據庫(或者您希望每頁顯示的任意數量的結果),然後在檢索後對其進行過濾,如果達不到極限,則可以獲取更多數據。跟蹤進一步查詢的偏移量。

相關問題