2017-01-30 119 views
0

我有一个使用jenssegers包的mongodb网络应用程序。Laravel - Mongodb [jenssegers/laravel-mongodb] - Schema Builder

由于我使用的是mongodb,是否需要创建任何迁移表? Jenssegers数据库驱动程序也有(有限)schema builder support

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

    $collection->unique('email'); 
}); 

我发现了两个不同的 “答案”。这家伙是用the schema builder

enter image description here

而且Mulkave答案:

Q:“当我运行comman‘PHP工匠迁移’,那么我得到哪里被创建迁移表下面的错误到MongoDB的数据库:“

一个:” 你会误解的MongoDB是一个文档数据库的目的,你不需要有migratio ns在基于文档的数据库中,这就是他们很好的一个。他们拥有动态模式,因此您只需保存模型即可保存模型,无论他们拥有哪些属性,这意味着您必须收紧应用程序的业务逻辑,以确保模型按预期保存。“


所以,我需要迁移表? 谢谢!

+1

蒙戈DB是一个文件DATABSE,它没有任何特定的模式。例如,在你的用户集合中,一个文档(在mysql中相当于行)可以有用户名字段,另一个文档可以完全排除用户名。 mongo并不重要。所以在我看来,迁移是多余的。 –

+0

谢谢@SayantanDas! – confm

回答

0

我知道这是有点晚了,但我想我会在一些代码扔在这里,我想有两个索引模型理由:

  1. 我可以使用它像一个接口,即我被迫ente将这些信息纳入其中,因为它是模型要求的一部分。这确保我有一个干净的数据集。这只是偏好,这不是要求。
  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']); 
    } 
}