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……

Crear prefijos a tabla y usarlos en consultas

laravel

Crear prefijos a tablas y usarlos en consultas, es algo perfectamente posible de hacer en Laravel

Podemos  crear un  prefijo a todas las tablas de nuestra Base de Datos,  basta con ir al archivo  config/database.php, y en la opción prefix, y añadir el que queremos usar

'mysql' => [
    'driver'    => 'mysql',
    'host'      => env('DB_HOST', 'localhost'),
    'database'  => env('DB_DATABASE', 'database'),
    'username'  => env('DB_USERNAME', 'root'),
    'password'  => env('DB_PASSWORD', ''),
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => 'prefijo_',
    'strict'    => false,
    'options' => array(),
],

En el caso de que realicemos consultas puras o  del tipo DB::raw tendremos que recordarle a Laravel el prefijo que usamos.

Leer otro articulo de Laravel
Primero  obtenemos el prefijo.

$db_prefix = DB::getTablePrefix();

Ahora dentro de la función DB::raw ingresamos el prefijo 

$productos = App\Producto::join("tipos","productos.tipos_id","=","tipos.id")
  ->leftJoin(DB::raw("(SELECT * FROM {$db_prefix}materials where {$db_prefix}materials.estado=1) as materials"),
    function($join){
      $join->on('productos.id','=','materials.productos_id');
    }
  )
  ->select(DB::raw("{$db_prefix}productos.*"))
  ->addSelect(DB::raw("DATE_FORMAT({$db_prefix}materials.created_at,'%d/%m/%Y %h:%i %p') AS materials_creado"))
  ->where('productos.estado','=',1)
  ->where('materials.pruebas_count','>',0)
  ->whereRaw(DB::raw("{$db_prefix}materials.etiquetas !=''"))
  ->get();
 $sql = "SELECT * FROM {$db_prefix}productos WHERE {$db_prefix}productos.estado = ? AND {$db_prefix}productos.fecha_caducidad < ?";
DB::select($sql,array(1,20));

Y listo, esto es todo.

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

Gracias.

….un sueño es casi todo  y más que  nada, más que todo al soñarlo, casi nada después……

Buscar una palabra en la base de datos, en Laravel

laravel

Un elemento común en una aplicación es que nos toque buscar una palabra en la base de datos, en Laravel. Aquí les muestro una forma de hacerlo que funciona.

Buscando una palabra en varias columnas o en todo un modelo

Lo que haremos es crear una variable query  y con el uso “use” y  de orWhere, nos compare el contenido de la columna con el valor de la búsqueda.

$busqueda = 'Palabra o termino a encontrar;
$descripcion = Descripcion::from('descripcion as a')
    ->where(function ($query) use ($busqueda) {
      $query = $query->orWhere('a.titulo','like',"%$busqueda%");
      $query = $query->orWhere('a.nombre','like',"%$busqueda%");
      $query = $query->orWhere('a.explicacion','like',"%$busqueda%");
      $query = $query->orWhere('a.etiquetas','like',"%$busqueda%");
    });
$posts = $posts->where('a.estado','=',1)
    ->get();

Leer mas sobre Laravel en este blog

En el ejemplo de abajo, estaremos, buscando diferentes  palabras en varias columnas del modelo Usuario,  solo en aquellos  registros que están activos

$columnasbusqueda = ['nombre','apellidos','apodo'];
$terminos = 'Palabras a buscar';
$palabras = explode(" ",$ terminos);
$usuarios = Usuario::from('usuarios as a')
    ->where(function ($query) use ($columnasbusqueda,$ palabras) {
        foreach ($palabras as $palabra) {
            $query = $query->where(function ($query) use ($columnasbusqueda,$palabra) {
                foreach ($columnasbusqueda as $columna) {
                    $query->orWhere($columna,'like',"%$palabra%");
                }
            });
        }
    });
$usuarios = $usuarios->where('a.estado','=',1)
    ->get();

Y listo, esto es todo.

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

Gracias.

…..lo que realmente importa no es lo que te da la vida, sino lo que haces con ello…

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…….

Asignar valores por defecto a la relación belongsTo

laravel

Si tenemos en nuestra vista un producto que pertenece a una categoría, podemos asignar valores por defecto a la relación belongsTo, para acceder a el, haciendo algo asi:

{{ $producto->categoria->nombre }}

Pero si el producto es borrado, o no se le asigna categoría alguna, recibimos un error, del tipo “property of non-object”.

Mas sobre las relaciones Belongs to

Esto podríamos prevenirlo asi:

{{ $producto->categoria->nombre ?? '' }}

O podemos ir a la relación en Eloquent y darle valor por defecto

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

De ese modo la relación de la categoría(), retornara un valor vacio en el modelo Categoria, si el producto no la tuviera, entonces podemos añadir al modelo un valor por defecto, asi:

 public function categoria()
{
    return $this->belongsTo('App\Categoria')->withDefault(['nombre' => 'sin categoria]);
}

Y listo, esto es todo.

Algo más sobre relaciones en Laravel

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……

Translate »