Comandos de Artisan

logo laravel

La potencia  de los comandos de Artisan, para aquellos que ya entienden algo de Laravel, es indiscutible.

Artisan posee un conjunto de comandos, que permiten que pueda aprovecharse muy bien su capacidad. Para listar estos comandos basta con escribir en la consola

  php artisan list 

e inmediatamente obtendremos:

Las opciones que disponibles con cada comando, pueden obtenerse mediante  help:

php artisan help nombre-comando 

o acortando simplemente con -h:

php artisan nombre-comando -h

Así obtendremos: la forma de usar el comando, sus argumentos , una descripción y las opciones que podemos agregar. Por ejemplo, para php artisan migrate -h  nos muestra:

Aquí nos está diciendo dice que “mígrate” es el comando para correr las migraciones y entre las opciones con que cuenta está poder indicar cuál es la base de datos por ejemplo php artisan migrate –database=tests .

Una de las grandes ventajas de esta herramienta es que tiene un conjunto de comandos dedicado a generadores, es decir, que nos permiten crear elementos como controladores, middleware, seeders, modelos, entre otros, los cuales son los que están bajo la categoría make:


Cada uno de esos generadores tiene sus propias opciones, así que puedes revisarlo con el comando help.

Artisan nos permite crear controladores sin métodos, mediante el uso de la opción plain:

php artisan make:controller PostController --plain

Abajo muestro una lista de algunos de los comandos de uso  más común.

Serve:

php artisan serve

Se utiliza para lanzar el servidor de una aplicación,  corriéndolo desde el root de nuestra app.

Este servidor viene incluido en laravel y se levanta de modo individual para cada  caso. Después de cargarlo, nos indicará donde está corriendo.   

laravel development server started on http://localhost:8000/

Si vamos al navegador, y visitamos  http://localhost:8000/,  veremos nuestra aplicación corriendo.

Para detener el servidor, utilizaremos la combinación de  las teclas Ctrl+C.  

Cambiar el namespace de la aplicación:

php artisan app:name nombre-namespace

Ver el listado completo de rutas: 

php artisan route:list


Como resultado nos mostrará un listado de todas las rutas de la aplicación, con la información sobre el método HTTP, la URI, la acción, el nombre y sus  middlewares.

Poner en modo mantenimiento nuestra aplicación:

php artisan down

Sacar la aplicacion del modo mantenimiento

php artisan up

Artisan además asimila crear comandos, lo cual es muy útil para ejecutar tareas manuales o testear comportamientos.

Crear una tabla

php artisan make:migration
create_posts_table --create posts 

Correr la migracion

php artisan migrate

Modificar una tabla existente

De este modo estariamos agregando el campo «resumen» a la tabla «articulos»

php artisan make:migration add_resumen_to_articulos_table --table="articulos"

Agregar varios campos nuevos a la tabla «users»

php artisan make:migration add_fields_to_users_table
--table="users"

Generar una llave para hashing

php artisan key:generate

Crear un middleware

Por ejemplo escribir esto para crear un middleware que verifique si el usuario tiene una sesión

php artisan make:middleware HasUserASession

Crear un modelo

El siguiente comando creara el modelo Tarea

php artisan make:model Tarea

Crear un controlador

Crear un controlador de recursos tipo REST (resource), que incluye todos los métodos del CRUD(create, read, update, delete)

php artisan make:controller TareaController --resource

Generar el código boilerplate para autenticación de usuarios

Este comando debería ejecutarse lo más pronto al iniciar tu proyecto ya que re-escribirá tus layouts y controladores de Autenticación y Usuarios

 php artisan make:auth

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

Subir montañas hermana hombres……

Como ponerle un alias a una tabla

laravel

Suele suceder que tengamos la necesidad de ponerle un alias a una tabla, si nos vemos obligado a ello, podemos hacer esto.

Otros posts sobre Laravel

$cars = Car::from('cars as c')
    ->join('marcas as m',function($join){
        $join->on('c.roles_id','=','m.id')->where('m.estado','=',1);
    })    
    ->select("c.*","m.name")
    ->where('c.estado','=',1)
    ->get();

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

…., si avanzo sígueme, si me detengo empújame, si retrocedo mátame…….

Ordenar las relaciones, en Laravel

laravel

En Laravel podemos ordenar las relaciones de acuerdo a diferentes parámetros, por ejemplo size()

class Category extends Model
{
	public function shoes()
	{
		return $this->hasMany('App\Shoe')->orderBy('size');
	}
}

Otro orden que podemos conseguir es al usar las tablas pivotes, para las relaciones belongsToMany.

Post sobre Laravel

En el siguiente ejemplo tenemos el modelo Role y el modelo User,  y estamos mostrando en una vista, la relación entre ambos de forma descendente, según la fecha en que fue creado, en grupos  de 15, por página.

class Role extends Model
{
	public function users()
	{
		return $this->belongsToMany('Role\User')->withTimestamps();
	}
}

@if ($roles->users->count() > 0)
	Asignación
	@foreach ($roles->users()->orderBy('rol_user.created_at', 'desc')->take(15)->get() as $user)
		...
	@endforeach
@endif

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

Subir montañas hermana a los hombres……

Auth con el uso de modelos

logo laravel

Manejando algo del código, podemos emplear Auth con el uso de modelos, y crear un sistema de autenticación mediante el uso de sus relaciones, lo cual reforzará la seguridad de nuestra web.

Ver Como Instalar Laravel
En el ejemplo siguiente, creamos una función managePages(), dentro de la clase AdminPolicy, que nos indica una determinada condición para el usuario que intenta acceder, en este caso limita su uso solo a aquellos con los roles Admin y Editor.
Luego declaramos su validez dentro de Providers, específicamente en el constructor del AuthServiceProvider. Para esto lo que hacemos es pasarle la ruta exacta del GateContract y una variable que nos traerá los datos del user. Con el uso de un foreach le damos un valor dinamico al acceso.

// app/Policies/AdminPolicy.php
class AdminPolicy
{
public function managePages($user)
{
return $user->hasRole(['Admin', 'Editor']);
}
}
// app/Providers/AuthServiceProvider.php
public function boot( \Illuminate\Contracts\Auth\Access\GateContract $gate)
{
foreach (get_class_methods(new \App\Policies\AdminPolicy) as $method) {
$gate->define($method, \App\Policies\AdminPolicy::class . "@{$method}");
}
$this->registerPolicies($gate);
}

Luego en cada uno de los espacios donde necesitamos acceder, colocamos una clausula de acceso, que llamara a la clase que hemos creado.

Este post puede interesarte Error al intentar acceder al login en laravel

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

…………….subir montañas hermana hombres……..

Syntax error or access violation: 1071 Specified key was too long.Un error común al correr la migraciones

laravel error

Si recibes este error: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`)), aplica esta soluci

Dentro de App/Providers ir a AppServiceProvider y corregir la función boot

public function boot()
    {
        //
    }

Por

use Illuminate\Support\Facades\Schema; // añadir  facade Schema
public function boot()
    {
       // corrigiendo error …….
        Schema::defaultStringLength(191);
    }

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

…..subir montañas hermana hombres…….

Crear el recurso de autenticación del sistema Auth:

laravel

Es sabido que crear el recurso de autenticación en nuestra nueva aplicación es uno sino el primer paso después de crear el  proyecto, aquí les dejo una pequeña explicación de los pasos que sigo para hacerlo, tanto en local como en produccion si trabajamos en un plesk, y no queremos hacer deployment local, sino directamente arriba

Local:

En laravel 5 seria

php artisan make:auth

En laravel 6 seria

composer require laravel/ui

Se creara automáticamente el  comando ui/auth, dentro de artisan, lo ejecutamos:

php artisan ui vue --auth

luego ejecutamos

npm install && npm run dev

PLESK:

En laravel 5 seria

cd httpdocs/nombre_proyecto && /opt/plesk/php/7.3/bin/php artisan make:auth

En laravel 6 seria

/opt/plesk/php/7.3/bin/php /usr/lib/plesk-9.0/composer.phar require laravel/ui

luego se creara automáticamente el  comando ui/auth, dentro de artisan, lo ejecutamos

cd httpdocs/nombre_proyecto && /opt/plesk/php/7.3/bin/php artisan ui vue --auth

nos pedirá ejecutar

npm install && npm run dev

Es posible que no este instalado el node en els ervidor por tanto el npm  no se encontrara disponible. Aquí puede verse como instalar en el plesk,  el soporte  para node.js https://www.plesk.com/blog/product-technology/node-js-plesk-onyx

Una vez hecho esto accedemos al nuestro dominio en el servidor y activamos node.js e instalamos npm.

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

…., si avanzo sígueme, si me detengo empújame, si retrocedo mátame…….

Modificaciones en el modelo

laravel

Algunas de la cosas que nos reserva Laravel dentro de Eloquent, son las modificaciones en el modelo, que podemos hacer directamente sobre él para modificarlo.

Sabemos que un modelo tiene este formato

class User extends Model {
// la tabla enlazada
    protected $table = 'users';
// los campos que pueden ser llenados con el método create()
    
    protected $fillable = ['email', 'password']; 
    protected $dates = ['created_at', 'deleted_at']; 
// los campos protegidos 
    
protected $appends = ['field1', 'field2']; 
// valores adicionales que pueden ser retornados en un JSON
}

Ver más sobre Laravel

Pero podemos cambiar cosas por ejemplo

protected $primaryKey = 'uuid'; // cambiar el idf
public $incrementing = false; // que no sea autoincrementable 
protected $perPage = 25;//sobreescribir la paginación por defecto de 15 
const CREATED_AT = 'creado_en';
const UPDATED_AT = 'actualizado_en'; // sobre escribir los timestamp
public $timestamps = false; // no usar los timestamp

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

Subir montañas hermana hombres……

Búsqueda por incrementos y decremento en Laravel

laravel

Parte de la magia de este framework , es que podemos realizar búsqueda por incrementos y decremento en Laravel, aprovechando las funciones que nos ofrece Eloquent.
Esto puede sernos de mucha utilidad si asignamos valores por ejemplo a los usuarios, por participación y queremos obtener los movimientos en esos valores.

Relaciones en Laravel


Veamos un ejemplo:
En el caso siguiente asignamos inicialmente 50 puntos a cada cliente y luego obtenemos del modelo aquellos que incrementan los puntos y los que los pierden.

 $clientes = Customer::find($customer_id);
 $puntos_acumulados = $clientes->puntos_acumulados + 50;
 $clientes->update(['puntos_acumulados' => $puntos_acumulados]);
 // añadimos puntos
 Cliente::find($customer_id)->increment('puntos_acumulados', 50);
 // eliminamos puntos
 Cliente::find($customer_id)->decrement('puntos_acumulados', 50); 

Otro modo de utilizar incrementos y decrementos es aplicándolo directamente a la variable que representa al modelo por ejemplo en vez de escribir algo como:

 $productos = Producto::find($productos_id);
 $productos ->read_count++;
 $productos ->save();
 Incrementamos o decrecemos directamente asi:
 $productos = Producto::find($productos_id);
 $productos ->increment('read_count');
 O directamente en el modelo
 Producto::find(productos_id)->increment('read_count');
 Producto::find(productos_id)->increment('read_count', 5); // sumo 5
 Producto::find(productos_id)->decrement('stock'); // resto 1 

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

..Subir montaña hermana hombres…..

Laravel nos permite añadir propiedades mutacionales.

laravel

Por si lo necesitamos, debemos saber que Laravel nos permite añadir propiedades mutacionales, que nos permitan por ejemplo obtener el nombre completo de los clientes, aunque los tengamos separados en la base de datos por apellidos y nombre.

 function getNombreCompleto() 
{
 return $this->nombres . ' ' . $this->apellidos;
}

La cual llamaremos luego desde el  modelo Cliente y  con el uso de append, podemos añadirla.

class Cliente extends Model
{
 protected $appends = ['nombre_completo'];
}

Sin embargo no termina ahí, si   quisiéramos organizar a los clientes por el nombre completo no podríamos, o sea no podemos hacer esto:

$clientes = Cliente::orderBy('nombre_completo')->get();  
Pero si organizamos los datos luego de cogerlos, con sortBy si funciona, o sea:
$clients = Client::get()->sortBy('nombre_completo');  

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

..Subir montaña hermana hombres…..

Translate »