2017-01-30 176 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']); 
    } 
}