martes, 8 de diciembre de 2020

Crud Simple en laravel 8

 Para este ejemplo, comenzaremos con la BD para ello. primero crearemos los modelos con el comando. 

php artisan make:model Gps --migration

El comando anterior crea el modelo (de la tabla 'gps') y su migracion (donde se crea las tablas y sus campos). Laravel 8 en automatico crea los archivos: database\migrations\[Fecha-Creacion]_create_gps_table.php y app\Models\Gps.php.

Para empezar comenzaremos a crear la estructura de la tabla 'Gps', en el archivo database\migrations\[Fecha-Creacion]_create_gps_table.php

=====================================

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateGpsTable extends Migration{
    public function up(){
        Schema::create('gps', function (Blueprint $table) {
            $table->id();
            $table->bigInteger('clienteid')->unsigned();
            $table->string('nombreunidad');
            $table->string('nrocel');
            $table->string('imei');
            $table->string('sn');
            $table->integer('monto');
            $table->string('ciclo');
            $table->timestamps();
            $table->foreign('clienteid')->references('id')->on('clientes');
        });
    }
    public function down(){
        Schema::dropIfExists('gps');
    }
}
=====================================

Luego en la terminal creamos la factory para esta tabla.

php artisan make:factory GpsFactory

que genera el archivo database\factories\GpsFactory.php, donde pondremos datos de prueba.

=====================================
<?php
namespace Database\Factories;
use App\Models\Gps;
use Illuminate\Database\Eloquent\Factories\Factory;
class GpsFactory extends Factory{
    protected $model = Gps::class;
    public function definition(){
        return [
          'clienteid'=>$this->faker->numberBetween(1,200),
          'nombreunidad'=>$this->faker->name(),
          'nrocel'=>$this->faker->phoneNumber(),
          'imei'=>$this->faker->numberBetween(100000000000000,999999999999999),
          'sn'=>substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 15),#string aleatorio de 15 longitud
          'monto'=>$this->faker->randomElement([50,100,150,200]),
          'ciclo'=>$this->faker->name()
        ];
    }
}
=====================================
Luego de esto vamos al archivo database\seeders\DatabaseSeeder.php y ponemos el siguiente codigo:
=====================================
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use App\Models\Cliente;
use App\Models\Gps;
class DatabaseSeeder extends Seeder{
    public function run()    {
        Cliente::factory(200)->create();
        Gps::factory(1000)->create();
    }
}
=====================================
EL codigo anterior crea 200 registros aleatorios en la tabla "cliente" y 1000 en la tabla "gps".
Para ver el resultado debemos ejecutar en la terminal el siguiente comando:
=====================================
php artisan migrate
=====================================
El código anterior creara las tablas vacías, con todas las columnas y relaciones del mismo.
Luego debemos ejecutar el siguiente comando:
=====================================
 php artisan db:seed
=====================================
 Para resumir los 2 codigos anteriores pueden utilizar el comando, la cual elimina todas las tablas, las vuelve a crear y insertar los registros de prueba
=====================================
php artisan migrate:refresh --seed
=====================================


domingo, 25 de octubre de 2020

controladores de laravel 8

 Los controladores son utiles en laravel

para crean un controlador se utiliza el comando 

php artisan make:controller NombreControlador

Para ejemplo crearemos el controlador HomeController, para ello utilizaremos el siguiente comando



Una creado veremos que se creo un archivo php en la ruta: app\Http\Controllers\ con el nombre HomeController.php y en su interior solo veremos el siguiente codigo.


Para ver el funcionamiento de este controlador crearemos una funcion dentro de esta clase.


public function index(){
    return 'Hi from HomeController.Index';
  }
  

Ese simple código solo devolverá una cadena de texto.


Ya tenemos nuestro controlador creado y una funcion que devuelve una cadena de texto. pero aun no podemos verlo en el navegador o en nuestra aplicacion. para ello es importante crear una ruta para el manejor de este controlador. crearemos uno en el archivo: routes\web.php ya que queremos que se muestre en el navegador.


use Illuminate\Support\Facades\Route;
use App\Http\Controllers\HomeController;
Route::get('/', function () {
    return view('welcome');
});
Route::get('/home',[HomeController::class,'index'])->name('home.index');

Como vemos en el codigo primero agregados el archivo HomeController usando el comando use y luego creamos la ruta indicando el nombre de la clase y la funcion qu se va a ejecutar.


Una vez creado el controlador y la ruta respectiva, podremos verlos desde el navegador con la ruta asignada.



Rutas en laravel 8

 Las rutas en laravel 8 son el primer paso para tener en cuenta en nuestra aplicacion. consiste en tener un control sobre todas las rutas ficticias que podriamos manejar en laravel. Lo comunmente se conoce como una url amigable. Pero en laravel lo lleva a un nuevo nivel, ya no sólo permite tener una ruta amigable para web, sino tambien para APIS, Canales y consola. Para ver el funcionamiento utilizaremos de ejemplo las rutas API, que son la misma logica para WEB.

Cabe mencionar que la carpeta donde se encuentran las rutas es: routes




Como vemos dentro hay 4 archivos, donde podremos manejar las rutas segun nuestra necesidad. el mas utilizado es el web.php y api.php. ya que en la web.php administramos todas las rutas que se envian al navegador y el api.php para que pueda ser utilizado por otro programa para el envio y recepcion de informacion.
Para ver el funcionamiento de las rutas utilizaremos el programa Postman y el archivo api.php. donde simularemos el uso de una api.

para modo de ejemplo veremos el siguiente codigo.


Ahora, en el siguiente codigo, veremos las diferentes formas de usar una ruta en una api.

Route::get('/users',function(){
  return 'hi users';
});
  


Como vemos solo hemos agregado la linea 18-20. donde hacemos un return de cadena. vamos a probar en el postman

Como podemos ver, en el postman obtenemos el resultado esperado. y asi podemos añadir varias rutas mas. a continucion te detallo las diferentes variables que puede tener


Route::get('/users/{name}',function($name){
  #Si no se envia nada por el parametro enviara error
  return 'hi '. $name;
});

Route::get('/users/{name?}',function($name=null){
  #Si no se envia nada por el parametro NO enviara error
  return 'hi '. $name;
});

Route::get('/users/{name?}',function($name=null){
  #Con regla de validacion(solo letras) para el parametro
  return 'hi '. $name;
})->where('name','[a-zA-Z]+');

Route::get('/users/{name?}',function($name=null){
  #Con regla de validacion(solo letras) para el parametro
  return 'hi '. $name;
})->where('name','[a-zA-Z]+');

Route::get('/products/{id?}',function($id=null){
  #Con regla de validacion(solo numeros) para el parametro
  return 'product is '. $id;
})->where('id','[0-9]+');

Route::match(['get','post'],'/students',function(Request $req){
  return 'Request method is '.$req->method();
});

Route::any('/post',function(Request $req){
  return 'the method is '.$req->method();
});


sábado, 24 de octubre de 2020

Creando Nueva Aplicacion Laravel 8 php

 Antes de crear un proyecto, primero debes tener instalado el programa de composer (para descargar laravel 8 y sus componentes), git (para usarlo como terminal de linux y control de versiones) y xampp para crear un servidor virtual en tu maquina para hacer la pruebas.

Luego vas a la carpeta donde vas crear el proyecto y desde ahi le haces click derecho.

Se te abrira el terminal, muy similar al de linux y con los mismo comandos. Ahi debes por el siguiente codigo para crear tu primer proyecto.

composer create-project --prefer-dist laravel/laravel NombreDelProyecto dev-develop

Luego se empezara a crear el proyecto con el nombre asignado, cabe mencionar que necesitaras una conexion a internet ya que empezara a descargar la ultima version de laravel y sus componenetes. Esto puede tomar algo de tiempo. En nuestro ejemplo le pusimos de nombre al proyecto: laravel8pro2



Una vez que haya terminado de descargar todas las dependencias, mostrara un mensaje de confirmacion

Ahora, debemos de ingresar a la carpeta que se creo con el mismo nombre del proyecto, este es importarte ya que los demas comando que vienen se ejecutan estando dentro del proyecto.

cd laravel8pro2

Una vez estando dentro de la carpeta del proyecto ejecutamos el comando

php artisan serve

Este comando hara que se emule un servidor para laravel donde prodremos ver nuestro proyecto en marcha. la ruta exacta te mostrara el mismo terminal. Cabe mencionar que, para que funcione debes tener instalado y ejecutando el apache. Uno de los mas conocidos es el XAMPP.


Como veremos la ruta que nos muestra para ver nuestro proyecto en marcha es el: http://127.0.0.1:8000. si ponemos esa direccion en nuestro navegador podremos ver la siguiente pantalla. que significara que todo va bien y que nuestro proyecto fue correctamente creado.


Si no funciona,  lo mas probable es que tengas que reiniciar el XAMPP o el software donde estes ejecutando el APACHE.

Ahora ya sabemos como crear un proyecto de laravel.

sábado, 4 de julio de 2020

Cambiar el owner de tabla de una base de datos postgreSQL

El motor de Base de Datos PosgreSQL tiene una logica un tanto diferente sobre el resto de base de datos. una de ellas es la de cambiar de owner a las tablas.

Para tener un mejor ejemplo simularemos que la Base de datos se llama telcomde_telcomdb y tiene varios esquemas.

Si somos observadores, nos daremos cuenta que se accedio a phpPgAdmin con el usuario telcomdelperu. Para ejemplo usaremos el esquema almacen, donde tenemos unas tablas con el dueño merecamedi.

Si tratamos de modificar una tabla les arrojara el siguiente error
must be owner of relation articulos
eso significa que debes ser el owner de la tabla para poder hacer modificaciones. Para solucionar eso debemos ingresar al terminal como el usuario merecamedi directamente con la base de datos telcomde_telcomdb, obviamente te pedira la contraseña del usuario merecamedi el codigo es el siguiente:

psql -U merecamedi -d telcomde_telcomdb


Luego asignaremos el rol de merecamedi a telcomdelperu. Con el siguiente codigo:

GRANT merecamedi TO telcomdelperu;


como podrán ver en la imagen anterior les mostrara que telcomdelperu ya es miembro del rol de merecamedi. Significa, que telcomdelperu ya tiene el mismo rol que merecamedi. Pero en el caso de ustedes, les saldra el codigo de GRANT, que significa que fue asignado correctamente.

Luego se cambia de usuario a la base de datos. Esto es lo primero. El código es el siguiente

ALTER DATABASE telcomde_telcomdb OWNER TO telcomdelperu;



Con el codigo anterior, hemos cambiado de owner, ahora el dueño es telcomdelperu y ya no merecamedi. Sin embargo, a pesar de que ya es dueño telcomdelperu de la base de datos , las tablas siguen perteneciendo a merecamedi. Esto es algo particular de PostgreSQL. Ahora debemos cambiar cada tabla del esquema almacen. Con el siguiente código.

ALTER TABLE almacen.articulos OWNER TO telcomdelperu;


Cuando ejecuten el codigo anterior les mostrará el error de:
ERROR:  must be member of role "telcomdelperu"
Significa que el usuario que estamos utilizando merecamedi no es miembro del rol de telcomdelperu. Asi que, por ende, el codigo no funcionará. Para que funcione debemos inicar con el usuario telcomdelperu. cerramos y volvemos a iniciar la base de datos con el usuario telcomdelperu. El codigo es el siguiente:

psql -U telcomdelperu -d telcomde_telcomdb


Ahora si podremos utilizar el codigo:
ALTER TABLE almacen.articulos OWNER TO telcomdelperu;
Podremos ver que, ya se hizo el cambio desde phpPgAdmin.


Podremos repetir el código para todas las tablas del esquema.
ALTER TABLE almacen.categorias OWNER TO telcomdelperu;
ALTER TABLE almacen.marca OWNER TO telcomdelperu;
ALTER TABLE almacen.presentacion_producto OWNER TO telcomdelperu;
ALTER TABLE almacen.productos OWNER TO telcomdelperu;
ALTER TABLE almacen.unidad_medida OWNER TO telcomdelperu;

Podremos ver los cambios correctamente desde PhpPgAdmin.

Eso es todo. Ya sabemos cómo cambiar de owner un tabla. Deja tu comentario.

viernes, 10 de abril de 2020

Logica de urls, arquitectura SILO

Las url varian dependiendo del webmaster que lo crea, hoy vamos a armar una arquitectura de url, en forma vertical, por ejemplo:

https://mipagina.com/categoriasuperios/subcategoria/nombre-post.

Ejemplo:
https://recamedi.org/programacion/base-de-datos/mysql/asignar-select-a-variable-en-mysql/

Paso 1: Primero debes crear las categorias y subcategorias que usaras en tus post.


Paso 2: Luego debes instalar el Plugin YOAST SEO y configurarlo. Aqui la parte importante son las siguientes opciones, en Taxonomies.
Este paso es importante porque evita que las categorias de los post se indexen y no se muestren. Lo que nos ayudará a poner una pagina personalizada en vez de una pagina de categorias.

Paso 3: Ahora debes crear paginas con el mismo nombre(slug) de la categoría, en el ejemplo utilizado debemos crear lo siguiente:
Pagina -- programacion(slug)
Post -- base-de-datos(slug), con categoria programacion.
Post -- mysql(mysql), con categoria base-de-datos.
Post -- asignar-select-a-variable-en-mysql(slug), con categoria mysql.
Con esos pasos tendras un post en vez de categorias.
Por ejemplo en la ultima pagina asignar-select-a-variable-en-mysql(slug), la categoria seria seleccionada asi:
Con esto ya tienes todas las urls con una arquitectura vertical.

sábado, 21 de marzo de 2020

Tema Hijo en wordpress

Los blogueros de wordpres nos encontramos con el dilema de que nos cuesta encontrar un tema acorde a nuestra necesidad. Alguna vez encontramos un tema 'casi' a nuestro gusto, pero nos gustaria hacer un pequeños cambios en el tema. A continuación te enseño el paso a paso para crear un tema hijo.
Paso 1: debe dirigirte a tu Cpanel y crear un carpeta similar a la carpeta padre. Aunque no es obligatorio, se recomienda, especialmente si estás creando un tema para uso público, que al nombre del directorio del tema hijo se agregue ‘-child’.

Para nuestro ejemplo: utilizare el tema padre: business-consultant-finder y creare lo estilos a partir de este tema y lo llamare: bcf-shop-child.
Paso 2: Crear la hoja de estilo del hijo, que normalmente heredara todo el estilo del padre, pero podremos modificar varias cosas, porque sera uno de los ultimos archivos que se modifiquen. Antes que se empiece a modificar las clases de CSS, debes poner las siguientes lineas para que importe los estilos del padre y para que wordpress entienda que es hijo de otro tema. 
El archivo debe de llamarse style.css y debe estar en la carpeta bcf-shop-child(en nuestro ejemplo).

/*
 Theme Name:   BCF Shop Child
 Theme URI:    http://example.com/twenty-fifteen-child/
 Description:  Business Consultant Finder Child Theme
 Author:       recamedi
 Author URI:   http://recamedi.com
 Template:     business-consultant-finder
 Version:      1.0.0
 License:      GNU General Public License v2 or later
 License URI:  http://www.gnu.org/licenses/gpl-2.0.html
 Tags:         light, dark, two-columns, right-sidebar, responsive-layout, accessibility-ready
 Text Domain:  business-consultant-finder-child
*/
/* Aquí tus regals CSS */


Hay que tener en cuenta al encabezado de la hoja de estilo:

Deberás reemplazar el texto del ejemplo con los detalles de tu tema hijo.
La línea Template corresponde al nombre de directorio del tema padre. El tema padre en nuestro ejemplo es el tema Twenty Fifteen, por lo que Template será twentyfifteen que es el nombre de su directorio. Como lo normal es que estés trabajando con un tema principal diferente, deberás ajustar esta línea.
Paso 3: El último paso es poner en cola las hojas de estilo de los temas padre e hijo, para ello se crear un archivo con el nombre functions.php y agregaremos la accion wp_enqueue_scripts  y usar wp_enqueue_style(), como se muestra a continuación:

<?php
add_action( 'wp_enqueue_scripts', 'theme_slug_enqueue_styles' );
function theme_slug_enqueue_styles() {
    $parent_style = 'parent-style'; // Esto será 'twentyfifteen-style' para el tema Twenty Fifteen.
    wp_enqueue_style( $parent_style, get_template_directory_uri() . '/style.css' );
    wp_enqueue_style( 'child-style',
        get_stylesheet_directory_uri() . '/style.css',
        array( $parent_style ),
        wp_get_theme()->get('Version')
    );
}
/* Aquí tus funciones personales */
?>
Con estos pasos ya esta creado el tema hijo y podremos verlo en temas, desde nuestro wordpress. Ahora solo debemos activarlo, claro esta, que no le hemos asignado ninguna mujer, por lo tanto, no se mostrara ninguna imagen.
Una vez activo veras que podras personalizarlo como si fuera el tema padre. Ademas puedes copiar todos los archivos del padre y pegarlos en el hijo y hacer las modificaciones ahi, sin tener que perjudicar el tema original.

Crud Simple en laravel 8