Relaciones en modelos Laravel

Relaciones de modelos a la base de datos Mysql con Artisan

Publicado en Laravel 2018-03-12 18:28:48

Relaciones en modelos Laravel

Relaciones en modelos Laravel

Diseño Web Laravel Php

Resumen: Generador de esquemas de Laravel para crear fácilmente el esquema de la base de datos de su aplicación, exporta los modelos a MYSQL

Las migraciones son como el control de versiones para su base de datos, lo que le permite a su equipo modificar y compartir fácilmente el esquema de la base de datos de la aplicación. Las migraciones suelen combinarse con el generador de esquemas de Laravel para crear fácilmente el esquema de la base de datos de su aplicación. Si alguna vez ha tenido que decirle a un compañero de equipo que agregue manualmente una columna a su esquema de base de datos local, se ha enfrentado al problema que las migraciones de la base de datos resuelven.

Debemos antes modelar nuestras relaciones de una a varios, quedando el código asi:

Modelo : destinos

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class destinos extends Model
{
    protected $table = 'destinos';
    protected $fillable = [ 
    	'metatitle_en',
    	'metatitle_es',
    	'metadescription_en',
    	'metadescription_es',
    	'nombre_en',
    	'nombre_es',
    	'descripcion_en',
    	'descripcion_es',
    	'urlfoto',
    	'slug',
    	'visitas' ];    	
    	public function rutas(){
    		return $this->hasMany('App\rutas');
    	}
}

Modelo : rutas

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class rutas extends Model
{
    protected $table = 'rutas';
    protected $fillable = [ 
    	'metatitle_en',
    	'metatitle_es',
    	'metadescription_en',
    	'metadescription_es',
    	'nombre_en','nombre_es',
    	'descripcion_en',
    	'descripcion_es',
    	'urlfoto',
    	'slug',
    	'visitas',
    	'dias',
    	'precio',
    	'destinos_id'
    	 ];
    public function fotos(){
    	return $this->hasMany('App\fotos');
    }

    public function destinos(){
    	return $this->belongsTo('App\destinos');
    }   
}

y el modelo fotos:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class fotos extends Model
{
    protected $table = 'fotos';
    protected $fillable = [ 
    	'metatitle_en',
    	'metatitle_es',
    	'metadescription_en',
    	'metadescription_es',
    	'nombre_en',
    	'nombre_es',
    	'descripcion_en',
    	'descripcion_es',
    	'urlfoto',
    	'slug',
    	'visitas',
    	'tipo',
    	'rutas_id'
    	 ];
	public function rutas(){
    	return $this->belongsTo('App\rutas');
    }   
}

Ahora veremos como quedan los archivos para migrar los modelos

En la carpeta database/migrations encontramos  la semiestructura de las migraciones por cada modelo, que fueron generados al crear los modelos. Tienen la siguiente estructura:

<?php

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

class CreateDestinosTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('destinos', function (Blueprint $table) {
            $table->increments('id');           
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('destinos');
    }
}

Procedemos a modificar de acuerdo a los campos de los modelos correspondientes; en este caso  la migración para el modelo destinos que asi:

<?php

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

class CreateDestinosTable extends Migration
{ 
    public function up()
    {
        Schema::create('destinos', function (Blueprint $table) {
            $table->increments('id');
            $table->string('metatitle_en');
            $table->string('metatitle_es');
            $table->string('metadescription_en');
            $table->string('metadescription_es');
            $table->string('nombre_en');
            $table->string('nombre_es');
            $table->text('descripcion_en'); // caracteres html
            $table->text('descripcion_es'); 
            $table->string('urlfoto');
            $table->string('slug');
            $table->integer('visitas')->default(1);
            $table->timestamps();
        });
    }
    
    public function down()
    {
        Schema::dropIfExists('destinos');
    }
}

Para nuestro 2 modelo queda :

<?php

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

class CreateRutasTable extends Migration
{
    
    public function up()
    {
        Schema::create('rutas', function (Blueprint $table) {
            $table->increments('id');
            $table->string('metatitle_en');
            $table->string('metatitle_es');
            $table->string('metadescription_en');
            $table->string('metadescription_es');
            $table->string('nombre_en');
            $table->string('nombre_es');
            $table->text('descripcion_en'); // caracteres html
            $table->text('descripcion_es'); 
            $table->string('urlfoto');
            $table->string('slug');
            $table->integer('visitas')->default(1);            
            $table->integer('destinos_id')->unsigned();         
            $table->foreign('destinos_id')->references('id')
                ->on('destinos')->onDelete('cascade');
            $table->timestamps();
        });
    }

    
    public function down()
    {
        Schema::dropIfExists('rutas');
    }
}

Y para el modelo fotos:

<?php

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

class CreateFotosTable extends Migration
{

    public function up()
    {
        Schema::create('fotos', function (Blueprint $table) {
            $table->increments('id');
            $table->string('metatitle_en');
            $table->string('metatitle_es');
            $table->string('metadescription_en');
            $table->string('metadescription_es');
            $table->string('nombre_en');
            $table->string('nombre_es');
            $table->text('descripcion_en'); // caracteres html
            $table->text('descripcion_es'); 
            $table->string('urlfoto');
            $table->string('slug');
            $table->integer('visitas')->default(1);  
            $table->enum('tipo', ['foto', 'foto360','video']);
            $table->integer('rutas_id')->unsigned();         
            $table->foreign('rutas_id')->references('id')
                ->on('rutas')->onDelete('cascade');
            $table->timestamps();
        });
    }
  
    public function down()
    {
        Schema::dropIfExists('fotos');
    }
}

Y por último debemos actualizar nuestra base de datos con el siguiente comando:

php artisan migrate

Este comando envia una actualización de las modificaciones a la base de datos MYSQL de phpmyadmin.

 

El resultado podemos verlo en el siguiente video corto de menos de 03 minutos

Redacción:| Artículo leído: 235 veces | Publicación:


Compártelo con tus amigos


Publicaciones relacionadas de Laravel