Php MongoDB和MVC模型变量

Php MongoDB和MVC模型变量,php,mongodb,nosql,Php,Mongodb,Nosql,我从CodeIgniter/MySQL来到Laravel/MongoDB 例如,具有不同平台变量的用户类: 我使用变量: 身份证 名字 浏览器 在移动应用程序中使用以下变量: 身份证 名字 ios_版本 考虑到这种情况,在我的模型中,我应该有两个变量吗 <?php class user{ public $id; public $name; public $browser_kind; public $ios_ve

我从CodeIgniter/MySQL来到Laravel/MongoDB

例如,具有不同平台变量的用户类:

我使用变量:

  • 身份证
  • 名字
  • 浏览器
在移动应用程序中使用以下变量:

  • 身份证
  • 名字
  • ios_版本
考虑到这种情况,在我的模型中,我应该有两个变量吗

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


不需要预定义结构的NoSQL好处是什么?如何在模型中使用它?

仅仅因为Mongo不需要模式,您仍然需要为您的模型建模。最大的好处之一是您可以更改数据模型,而无需Mongo挂断您的电话。

就我个人而言,我只需将
browser\u kind
ios\u版本的
null
存储在同一文档中。这样做的原因是为了将来的扩张。IOS确实支持Firefox和Opera Mini等,因此考虑到这一点,我建议您将整个架构存储在一起

但是,由于这里似乎有两种静态模式,我建议您考虑不要将
browser\u kind
ios\u版本
存储在同一文档中,因为其中一种是
null

由于这两个模式永远不会重叠(在我们所知道的场景中),因此您将根据集合中的文档数量使用相当多的宝贵空间。这是因为MongoDB当前不压缩其文件

此外,这些字段在需要的地方似乎永远不会为
null
,即
browser\u kind
,而对于非移动用户,文档中的所有其他字段也永远不会为
null

因此,我会按照您获得的方式保留模型,但我会使用类似于
array\u filter
的函数来剥离您不想保存的字段

当然,这是一个问题,您使用的框架将所有这些逻辑抽象到一个您可能无法到达的地方,除非您自己做很多事情。考虑到这一点,您可以从单个
用户
类中抽象出两个类,一个定义
浏览器种类
,另一个定义
ios\u版本
,但这会开始增加应用程序的权重

这给了你一些选择和思考的东西