Diferència entre revisions de la pàgina «NF2 - Framework Laravel»

De wikiserver
Dreceres ràpides: navegació, cerca
(=RUTAS BÁSICAS)
Línia 106: Línia 106:
 
</source>
 
</source>
  
 +
'''RELACIONES'''
  
 +
Se deben de hacer las relaciones de la base de datos en las migraciones y también en los modelos para facilitar a Eloquent las consultas.
 +
 +
'''Relaciones Uno a Muchos Migraciones'''
 +
 +
un usuario tiene muchos post y un post lo tiene un usuario
 
<source lang="php">
 
<source lang="php">
 +
//tabla Users
 +
Schema::create('users', function (Blueprint $table) {
 +
            $table->increments('id');
 +
            $table->string('name');
 +
            $table->string('email')->unique();
 +
            $table->timestamp('email_verified_at')->nullable();
 +
            $table->string('password');
 +
            $table->rememberToken();
 +
            $table->timestamps();
 +
        });
 +
 +
//tabla Posts
 +
 +
Schema::create('posts', function (Blueprint $table) {
 +
            $table->increments('id');
 +
 +
            $table->integer('user_id')->unsigned();
 +
            $table->integer('category_id')->unsigned();
 +
           
 +
            $table->string('name',128)->unique();
 +
            $table->string('slug',128)->unique();
 +
 +
            $table->mediumText('excerpt')->nullable();
 +
            $table->text('body');
 +
            $table->enum('status',['PUBLISHED','DRAFT'])->default('DRAFT');
 +
 +
            $table->string('file', 128)->nullable();
 +
 +
            $table->timestamps();
 +
 +
            //relaciones
 +
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
 +
          //$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade')->onUpdate('cascade');
 +
 +
        });
 +
 +
 
</source>
 
</source>
 +
 +
 +
'''Para las relaciones NxM Muchos a Muchos.'''
 +
Un post puede tener muchas Etiquetas y una etiqueta puede tener muchos Posts, por tanto habrá que crear una tabla auxiliar.
  
 
<source lang="php">
 
<source lang="php">
 +
//Tabla Post
 +
Schema::create('posts', function (Blueprint $table) {
 +
            $table->increments('id');
 +
 +
          // $table->integer('user_id')->unsigned();
 +
          // $table->integer('category_id')->unsigned();
 +
           
 +
            $table->string('name',128)->unique();
 +
            $table->string('slug',128)->unique();
 +
 +
            $table->mediumText('excerpt')->nullable();
 +
            $table->text('body');
 +
            $table->enum('status',['PUBLISHED','DRAFT'])->default('DRAFT');
 +
 +
            $table->string('file', 128)->nullable();
 +
 +
            $table->timestamps();
 +
 +
            //relaciones
 +
            //$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
 +
            //$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade')->onUpdate('cascade');
 +
 +
        });
 +
 +
//tabla Tags
 +
 +
Schema::create('tags', function (Blueprint $table) {
 +
            $table->increments('id');
 +
 +
            $table->string('name',128);
 +
            $table->string('slug',128)->unique();
 +
 +
            $table->timestamps();
 +
        });
 +
 +
 +
//tabla auxiliar
 +
 +
  Schema::create('post_tag', function (Blueprint $table) {
 +
            $table->increments('id');
 +
 +
            $table->integer('post_id')->unsigned();
 +
            $table->integer('tag_id')->unsigned();
 +
 +
            $table->timestamps();
 +
 +
            //relaciones
 +
            $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade')->onUpdate('cascade');
 +
            $table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade')->onUpdate('cascade');
 +
 +
        });
 +
 
</source>
 
</source>
  

Revisió del 12:50, 31 oct 2019

ESTRUCTURA DIRECTORIOS

=RUTAS BÁSICAS

Dentro de Routers->Web

Route::get('mundo', function () {
    return 'Hello World';
});

Creamos un controlador vacio, App->http->Controller->

php artisan make:controller MoviesController --plain
en route
Route::get('/ejemplo', 'PeliculasController@index');
en controlador
public function index(){

echo "hola Julio";

}


//verbos HTTP múltiples
Route::match(['get', 'post'], '/', function () {
    //
});

//verbos HTTP cualquiera
Route::any('/', function () {
    //
});


//dentro de la misma vista
Route::get('/show/{id?}',function($id="122"){

    return $id;
    
    })->name('show');


Route::get('/par-o-impar-{numero}',function($numero){    // no hace falta usar '/'

return $numero;

//return redirect()->to('/show/3');  -> te redirije a la ruta que le indicas 
//return redirect()->route('show')  -> te redirije a la ruta que tiene el nombre asignado en el name.
//return redirect()->route('show',['id' => '222'])  -> en caso de pasarle algun parámetro
} )->where(['number' => '[\d]+']);    // de esta forma añadimos una expresion regular para que solo puedan introducir numeros


Route::get('user/{name?}', function ($name = 'John') {  //$name=null
    return $name;
});

Restricciones con Expresiones Regulares

Route::get('user/{name}', function ($name) {
    //
})->where('name', '[A-Za-z]+');   //nomes poden passar lletres miníscules o Majúscules como mínim una volta 

Route::get('user/{id}', function ($id) {
    //
})->where('id', '[0-9]+');

Route::get('user/{id}/{name}', function ($id, $name) {
    //
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);   //le pasamos un array en caso de más de un elemento.


Route::group(['prefix'=>'admin'],function(){  // en el navegador puedes poner /admin/modificar-usuario  o  /admin/insertar-usuario
    
    Route::get('modificar-usuario',function(){

    return "modifica usuario";

    });


    Route::get('insertar-usuario',function(){

    return "insertar usuario";

    });

});

RELACIONES

Se deben de hacer las relaciones de la base de datos en las migraciones y también en los modelos para facilitar a Eloquent las consultas.

Relaciones Uno a Muchos Migraciones

un usuario tiene muchos post y un post lo tiene un usuario

//tabla Users
 Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });

//tabla Posts

 Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');

            $table->integer('user_id')->unsigned();
            $table->integer('category_id')->unsigned();
            
            $table->string('name',128)->unique();
            $table->string('slug',128)->unique();

            $table->mediumText('excerpt')->nullable();
            $table->text('body');
            $table->enum('status',['PUBLISHED','DRAFT'])->default('DRAFT');

            $table->string('file', 128)->nullable();

            $table->timestamps();

            //relaciones
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
           //$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade')->onUpdate('cascade');

        });


Para las relaciones NxM Muchos a Muchos. Un post puede tener muchas Etiquetas y una etiqueta puede tener muchos Posts, por tanto habrá que crear una tabla auxiliar.

//Tabla Post
 Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');

           // $table->integer('user_id')->unsigned();
           // $table->integer('category_id')->unsigned();
            
            $table->string('name',128)->unique();
            $table->string('slug',128)->unique();

            $table->mediumText('excerpt')->nullable();
            $table->text('body');
            $table->enum('status',['PUBLISHED','DRAFT'])->default('DRAFT');

            $table->string('file', 128)->nullable();

            $table->timestamps();

            //relaciones
            //$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
            //$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade')->onUpdate('cascade');

        });

//tabla Tags

Schema::create('tags', function (Blueprint $table) {
            $table->increments('id');

            $table->string('name',128);
            $table->string('slug',128)->unique();

            $table->timestamps();
        });


//tabla auxiliar

  Schema::create('post_tag', function (Blueprint $table) {
            $table->increments('id');

            $table->integer('post_id')->unsigned();
            $table->integer('tag_id')->unsigned();

            $table->timestamps();

             //relaciones
             $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade')->onUpdate('cascade');
             $table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade')->onUpdate('cascade');
 
        });