2013-03-05 68 views
0

我來自CodeIgniter/MySQL到Laravel/MongoDB。MongoDB和MVC模型變量

例如,通過平臺上的用戶類不同的變量:

我的網站上使用的變量:

  • ID
  • browser_kind

在移動應用程序使用變量:

  • ID
  • ios_version

考慮到這一點的情況下,在我的模型,我應該有兩個瓦爾?

<?php 
    class user{ 
     public $id; 
     public $name; 
     public $browser_kind; 
     public $ios_version; 
    } 
?> 

對於不需要預定義結構的NoSQL優勢呢?如何在模型中使用它?

回答

1

僅僅因爲Mongo不需要模式,您仍然需要爲模型建模。最大的好處之一是你可以在沒有Mongo掛斷你的情況下改變你的數據模型。

1

就我個人而言,我只是將或ios_versionnull存儲在同一文檔中。這是爲了未來的擴展。 IOS確實支持Firefox和Opera Mini等,因此我建議您將整個架構存儲在一起。

但是,因爲你似乎有兩種這裏靜態模式的,我建議你仔細想想不是都存儲在同一個文檔中的browser_kindios_version一個或另一個是null

由於兩個模式從不重疊(在我們所瞭解的場景中),您將僅使用相當數量的寶貴空間,具體取決於集合中有多少個文檔。這是因爲MongoDB目前不壓縮它的文件。

它也好像這些領域將永遠null需要的地方,即browser_kind等各個領域將永遠是需要他們對非移動用戶在文檔中null

因此,我會保持你的模式,但我會使用像array_filter這樣的函數去除你不想保存的字段。

當然,這是一個問題,你正在使用一個框架,將所有這些邏輯抽象到一個你可能無法得到的地方,除非你自己做了很多。考慮到這一點,你可以創建兩個類,它們從一個user類中抽象出來,一個定義browser_kind,另一個定義ios_version,但是這會開始增加應用程序的權重。

因此,這給你幾個選項和事情要考慮。