0

CodeIgniter/MySQL から Laravel/MongoDB に移行しています。

たとえば、プラットフォームごとに異なる変数を持つ User クラス:

私のウェブサイトは変数を使用します:

  • ID
  • 名前
  • ブラウザの種類

モバイル アプリでは、次の変数を使用します。

  • ID
  • 名前
  • ios_バージョン

このケースを考えると、私のモデルには両方の変数が必要ですか?

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

事前に定義された構造を必要としない NoSQL の利点はどうですか? モデルでこれをどのように使用しますか?

4

2 に答える 2

1

Mongo がスキーマを必要としないという理由だけで、モデルをモデル化する必要があります。最大のメリットの 1 つは、Mongo に頼ることなくデータ モデルを変更できることです。

于 2013-03-05T19:09:23.430 に答える
1

null個人的には、どちらかbrowser_kindまたは両方ios_versionを同じドキュメントに保存するだけです。その理由は、将来の拡張のためです。IOS は Firefox や Opera Mini などをサポートしているため、スキーマ全体をまとめて保存することをお勧めします。

ただし、ここには 2 種類の静的スキーマがあるように思われるため、 と の両方browser_kindios_version同じドキュメント内に格納しないことを検討することをお勧めしますnull

2 つのスキーマが重複することは決してないため (シナリオについて私たちが知っていることでは)、代わりに、コレクション内のドキュメントの数に応じて、かなりの量の貴重なスペースを使用するだけです。これは、MongoDB が現在ファイルを圧縮していないためです。

また、これらのフィールドnullが必要な場所には決してないように思われます。つまりbrowser_kind、他のすべてのフィールドはnull、モバイル以外のユーザーが必要とするドキュメントには決してありません。

そのため、モデルをそのままの状態に保ちますが、array_filter保存したくないフィールドを削除するような関数を使用します。

もちろん、これは問題です。このロジックのすべてを、自分で多くのことをしない限り到達できない場所に抽象化するフレームワークを使用しています。これを考慮して、1 つのクラスから抽象化する 2 つのクラスを作成できuserます。browser_kindios_version

そのため、いくつかのオプションと検討事項が表示されます。

于 2013-03-05T19:22:10.643 に答える