Diferència entre revisions de la pàgina «NF2 - Framework Laravel»
De wikiserver
(→=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 11: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');
});