You are using an outdated browser. For a faster, safer browsing experience, upgrade for free today.

Relacionamento de tabelas com MongoDB e Laravel

< Carlos > atualizado em 22/01/2020


OBJETIVO Criando relacionamento entre duas tabelas em um banco não relacional atraves dos motores do laravel.

SITUAÇÃO O Exemplo abaixo se baseia em duas tabelas (document,files), onde um documento pode ter varios arquivos denominados como files, e varios files podem ter um document ( 1 > N ).

MIGRATE

Documents

 Schema::connection('mongodb')->create('documents', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->bigInteger('user_id');
            $table->string('name',255);
            $table->text('description')->nullable();
            $table->softDeletes();
            $table->timestamps();
        });

Files

 Schema::connection('mongodb')->create('files', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->bigIncrements('user_id');
            $table->string('path', 5);
            $table->string('extension', 5);
            $table->date('reference_date')->nullable();

            $table->unsignedBigInteger('document_id');
            $table->foreign('document_id')->references('id')->on('documents');
            $table->timestamps();
        });

MODEL

Documents

    protected $connection = 'mongodb';
    protected $fillable = [
        'user_id',
        'name',
        'description',
       ];

    public function files()
    {
        return $this->hasMany(File::class);
    }

Files

 protected $connection = 'mongodb';
    protected $fillable = [
        'user_id',
        'document_id',
        'path',
        'extension',
        'reference_date',
    ];

    public function document(){
        return $this->belongsTo(Document::class);
    }

Obs.: Se atentar na pluralização das classes, conforme o exemplo acima document no singular por ser apena um documento por registro, e files no plural por ser varios arquivos para um documento.

CONTROLLER

public function index()
{
   $files = File::with('document')->first();
   dd($files->document->name);
}

Observação: No exemplo acima iremos ter o retorno do nome do documento "CADASTRADO".


Utilizamos cookies essenciais e tecnologias semelhantes de acordo com a nossa Política de Privacidade e nossos Termos e Condições de Uso. Ao continuar navegando, você concorda com esta utilização.