Laravel - Mongodb [ jenssegers/laravel-mongodb ] - 架构生成器

con*_*nfm 5 php mongodb laravel laravel-5

我有一个带有 mongodb 的网络应用程序,使用 jenssegers 包。

由于我使用的是 mongodb,我需要创建任何迁移表吗?Jenssegers 数据库驱动程序还具有(有限的)模式生成器支持

Schema::create('users', function($collection)
{
    $collection->index('name');

    $collection->unique('email');
});
Run Code Online (Sandbox Code Playgroud)

我找到了两个不同的“答案”。这家伙正在使用模式生成器

在此输入图像描述

Mulkave 的回答是:

:“当我运行命令“php artisan migrate”时,我收到以下错误,因为迁移表被创建到 mongodb 数据库中:”

:“您可能误解了 MongoDB 作为文档数据库的目的,您不需要在基于文档的数据库中进行迁移,这就是它们的优点。它们具有动态模式,因此您所要做的就是保存您的模型,无论它们具有什么属性,这意味着您必须收紧应用程序的业务逻辑,以确保模型按照您的预期保存。”


那么,我需要迁移表吗?谢谢!

Ker*_*ren 5

我知道这有点晚了,但我想我应该在这里添加一些代码。我喜欢有一个索引模型有两个原因:

  1. 我可以像界面一样使用它,即我被迫输入这些信息,因为它是模型所需的一部分。这确保了我有一个干净的数据集。这只是偏好,不是要求。
  2. 索引搜索比未索引搜索更快。 我还没有对此进行足够的研究来弄清楚 jenssegers 库是否属于这种情况。但对我来说,如果您使用架构来设置集合并将其设置为索引这些字段,那么在该集合中搜索记录时会更快。您也可以从 Mongo 端手动设置,但我喜欢您可以使用这个 Eloquent 扩展来完成此操作。

因此,对于阅读本文的人来说,如果我用这个未经验证的论点说服了您,并且您想设置一个模式,我发现设置集合很容易,但删除它并不容易。如果您想进行完整迁移(请注意,执行此操作时您将丢失所有数据),那么您可以使用以下代码:

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateYourCollectionTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::connection('mongodb')->create('collection_name', function ($collection) {
            $collection->index('field_1');
            $collection->index('field_2');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        DB::connection('mongodb')->drop(['collection_name']);
    }
}
Run Code Online (Sandbox Code Playgroud)