El uso de when

laravel

When() es una de los métodos con los que Laravel, sorprende a los que comienzan. El uso de when, es un recurso al que recurro cada vez que puedo, por la potencia que aporta, ya que permite crear un código más reusable.    

Veamos por ejemplo que si queremos introducir una condicional del tipo if else,  en un código podemos escribir algo asi enlazando ifs:

En el primer caso estamos diciendo algo como esto: Si filtramos lo que trae el request, por la columna likes, el valor de la variable query acogerá,    aquellos registros  en que likes, sea mayor que el valor de request donde likes_amount sea 0

if (request('filter_by') == 'likes') {
    $query->where('likes', '>', request('likes_amount', 0));
}
if (request('filter_by') == 'date') {
    $query->orderBy('created_at', request('ordering_rule', 'desc'));
}

Leer otros artículos sobre Laravel

Aquí estamos enlazando dos condiciones, que consideran el valor de unos campos para decidir que hacer.
Si usaramos when lo escribiríamos asi:

$query = Author::query();
$query->when(request('filter_by') == 'likes', function ($q) {
    return $q->where('likes', '>', request('likes_amount', 0));
});

$query->when(request('filter_by') == 'date', function ($q) {
    return $q->orderBy('created_at', request('ordering_rule', 'desc'));
});

Y lo que estamos diciendo es que la variable query, aplicará al modelo Author el método query, y que cuando el valor ejecute el filter_by a la columna likes dentro del metodo request, la función anónima se le pasara como parámetro una variable $q cuyo valor seran aquellos registros donde likes sea mayor que la likes_amount igual 0

Como vemos $q es una variable comodin que soporta el peso de la función, pues su valor variara en función del resultado.

$query = Producto::query();
$query->when(request('marca', false), function ($q, $marca) { 
    return $q->where('marcas_id', $marca);
});
$store = $query->get();

Y listo, esto es todo.

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

Gracias.

Subir montañas hermana hombres……

Buenas prácticas para desarrollar en Laravel

laravel

Después de un tiempo desarrollando en este framework y recuperando opiniones de otros y mi propia experiencia, aquí dejo algunos de las que considero buenas prácticas de programación en Laravel

  1. Leer la documentación de Laravel, es sencilla y clara y brinda mucha información que necesitaras. Usarla como tutorial siempre a mano puede ser de gran ayuda.  
  2. Utilizar la estructura que Laravel ofrece para organizar el código por carpetas, con el enfoque que Laravel ofrece.
  3. Aprende y utiliza bien el sistema de autenticación de Laravel.
  4. Cumplir las políticas y salidas de Laravel.
  5. Mantener y los controladores y comandos ligeros. Es preferible transferir la mayor parte de la lógica a las clases, los modelos o las políticas o puertas de salida y enlace.
  6. Utilice los patrones  de migración y herramientas de Eloquent en vez de usar directamente  SQL.
  7. Usar los traits, para compartir la lógica y el comportamiento de los modelos.
  8. Aprovechar las ventajas de la metodología de frontend, basada en componentes de javascript, en vez de abusar del uso de Blade, Laravel esta preparado para integrarse a Vue, React, incluso  Angular.
  9. Explote al máximo las  prácticas REST en sus controladores y use tantos controladores como necesite, tambien aproveche a los controladores de acción única :__invoke()
  10. Establezca principios coherentes para obtener las  respuestas de las solicitudes, que ofrece Laravel, como la API JSON y use UUID, cuando pueda.
  11. Cree componentes, lo que facilitara, la estructura de su código, y su consumo, por la aplicación.
  12. Utilice comandos para tareas manuales, incluso para aquellas que algunas que pueden ser programadas, ya que pueden servirle para aliviar la carga de su aplicación.
  13. Resuelva el problema n+1, siguiendo la documentación de ayuda, ya que Eloquent, no tiene filtro para limitar  las consultas sql, por tanto hay que prestar atención  a la cargas del tipo lazy y eager.
  14. Aprender y usar los comandos de Artisan y sus utilidades.
  15. Oculte la estructura de la base de datos a través de objetos de respuesta
  16. Laravel permite desarrollar fachadas propias, el desconocimiento a veces invita a crearlas. No haga abuso de ellas, si puede implementar el uso de los métodos de una fachada ya predefinida por Laravel.
  17. Use paquetes de terceros con moderación y solo aquellos que estén bien mantenidos.
  18. Haga pruebas, escriba pruebas para todo cuanto desarrolle.
  19. Comente  el código de manera explicita.
  20. Documéntese, estudie. Una buena referencia son los sitios de Laracon en Youtube, los foros de los foros en el sitio de Jeffrey Way, Laracasts.com,  los foros de Vuejs.org , el foro de  Adam Wathan para Laravel, Vue, Tailwind y  el de Wes Bos para Javascript. Pueden serle útiles. Algunos serán de pago, pero pueden valer la pena.

Y listo, esto es todo.

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

Gracias.

Error _io.TextIOWrapper

python error

Hablemos del mensaje de error _io.TextIOWrapper, que suele aparecer cuando intentamos imprimir un determinado archivo en Python.

Realmente aunque lo consideramos un error no lo es, sino que es mas bien un mensaje que nos indica que estamos intentando imprimir algo que no es correcto.

Veamos un ejemplo de como debería estar planteado nuestro código:

def  imprimir():
    #Abrimos el archive para imprimir.txt.
    nuevo_file = open('imprimir.txt', 'r')

    #lo leemos
    contenido = nuevo_file.read()

    #Imprimimos los datos dentro del objeto contenido
    print(contenido)

Revisa bien los elementos del código y recuerda que en Python todo, son objetos a los cuales les vamos aplicando funciones, cuyo tipo no necesita ser definido de antemano y que pueden variar su contenido.

Espero modestamente, que este post, sirva de ayuda  a alguien.

La turba enardecida se convierte en manada, y la manada mata.

Y.

Metodos Raw

laravel

Para añadir consultas tipo Raw  en Eloquent, contamos con algunos métodos muy útiles. Aquí muestro  ejemplos con tres  metodos Raw ( whereRaw, havinRaw y orderByRaw)

 // whereRaw
$orders = DB::table('orders')
    ->whereRaw('price > IF(state = "TX", ?, 100)', [200])
    ->get();

// havingRaw
Product::groupBy('category_id')->havingRaw('COUNT(*) > 1')->get();

// orderByRaw
User::where('created_at', '>', '2016-01-01')
  ->orderByRaw('(updated_at - created_at) desc')
  ->get();

Y listo, esto es todo.

Más sobre Laravel en mi blog

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

Gracias.

Subir montañas hermana hombres……

Estructura Prestashop

logo prestashop

Analizando la estructura de Prestashop, el cual tuve que regresar, hace unos días, y con más de tiempo disponible, explicaré como funciona.

Prestashop funciona bajo el sistema  modelo, vista, controlador,  y por tanto tiene muy bien estructurado la separación lógica de estos tres componentes.

Los archivos con la extensión tpl, se encargan de las vistas, Smarty es su gestor de base de datos y están los modulos que ejecutan acciones complejas dentro del Framework.

Orientado a objetos

Prestashop está orientado a objetos, o al menos lo simula con bastante decencia, por ello todos sus módulos actúan como objetos y extienden de diferentes clases, además poseen un hook del cual cuelgan. Los modulos poseen casi todos una vista y un controlador, del cual extienden funcionalidades.

Cuando Prestashop se instala, se instalan un conjunto de módulos básicos y luego cada tema o plantilla incorporara, los suyos propios que tendrán prioridad sobre los del sistema si llegan a coincidir.

Por tanto veremos que dentro de cada módulo, la lógica está representada por el archivo .php, con el nombre del modulo, y la vista por el archivo con el nombre del modulo y la extensión .tpl., en algunos casos podría tener un archivo index, tambien

El core

El  core de Prestashop, se divide a su vez en una estructura de carpetas, bastante intuitiva,  las más importantes para conocer y que podríamos tener que tocar son classes ,config, themes, override, modules, tools y translation.

Debido a su utilidad y gran aceptación, y ser de código abierto, posee una vasta red de colaboradores.

Los cambios más  drásticos seguramente serán aquellos que realicemos en modulos y themes, pero los que hagamos en los archivos php dentro de los módulos son los que más cuidado requieren .

Los cambios en la lógica deben hacerse en el nombredelmodulo.php. Debo decir que Prestashop asimila perfectamente php nativo, por tanto las modificaciones no requieren mucho más que conocer este lenguaje, pero cuidado, porque deberán luego adecuar también los efectos de estas modificaciones en la vista si fuera necesario, por diferentes vías, algunas de ellas por ejemplo reestructurar las imágenes o limpiar la cache no requieren el uso de código  y pueden aprovecharse para ello,  las herramientas que el mismo Prestashop ofrece, otras como la modificación de traducciones,  o la corrección del código de las vistas si exigirá conocimientos de javascript, html y css.

Override

Una herramienta importante que nos da el framework es el override, con ella los cambios que hagamos, lo guardaremos  allí, eso no facilita que al actualizar a nuevas versiones, estos no se sobrescribirán y nuestras modificaciones serán protegidas.

Cambios de versiones ha habido muchos, Prestashop tiene una comunidad de desarrolladores muy activa, pero la versión 1,6 sigue siendo la mejor, mas estable, menos bugs y mejor soportada.

A pesar de todas la ventajas que la versión 1.7 ofrece no acaba de brindar la suficiente confianza a los usuarios, yo por mi parte sigo recomendando que quien tenga la versión 1.6 no la cambie.

Prestashop es potente y posee muchas soluciones a mano, que podemos aprovechar. Mi sugerencias sobre donde hacer adecuaciones, para personalizarlo por ejemplo, son estas:

La manera  mas sencilla es tocar solo los archivos dentro de la carpeta modules. Sii no es necesario tocar el php, se pueden centrar las modificaciones en los archivos tpl. Importante decir que estos mezclan html con variables y código php que se encierra entre corchetes, hay que estudiar conocer la variables, lo cual no es demasiado difícil y atender a los archivos que poseen texto entre comillas simples, estos son textos que aparecen en la plantilla y que tendrán también traducción , por tanto si se cambian, se deberá buscar en el archivo de traducciones y cambiarlo.

Prestashop ofrece una herramienta para esto,  en el  Administrador de la tienda en Herramientas/Traducciones, o  se puede hacer también hurgando en el código directamente, en la carpeta idiomas.

También ser pueden modificar la estructura de los mails, esto se logra en los archivos dentro de la carpeta mails, editándolos fácilmente.

Plantillas

La modificación de los temas o plantillas se puede hacer por varias vías, una es  tomar un tema de internet:  los hay buenos y malos, y de pago y gratis. Los temas se instalan en la  carpeta “themes”.  

La otra  y es la que yo recomiendo que si no lo tienen claro,  se crea una plantilla nueva a partir de la  que trae Prestashop por defecto que en la versión 1.6 esta muy bien y  mejorarla.

El mismo prestashop permite crear un nuevo tema desde su propio administrador en el gestor de temas, basta con poner un  nombre nuevo y decirle que toma como base el tema default,  y seleccionar los módulos que heredara de el,

La ventaja de hacer esto es que es una plantilla que funcionara al 100%, cosa que no sucede a veces con las que hay en la red.

A partir de aquí modificarla será ya mas fácil, con las herramientas de cualquier desarrollador de frontend, pero con las herramientas de desarrollo de Chrome y un buen editor y la conexión a FTP, estará hecho todo.

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

Calcular el porcentaje de una columna en pandas

logo python

Veamos como  calcular el porcentaje de una columna en Pandas, para lo cual usaremos sus propia función sum()

Como sabemos Pandas trabaja con dataframes o marcos de datos y también queda claro, que el porcentaje se obtiene dividiendo  el valor total entre  la suma de todos los valores y luego multiplicando ese resultado por 100.

Lo que hacemos, no es otra cosa que aplicar este mismo procedimiento a la columna que deseamos analizar.

Primero sumaremos toda la columna con sum(), que es el método que se emplea para sumar en Pandas.

La sintaxis seria esta:

df [porcentaje] =(df ['resultado'] / df ['column_a_sumar'].sum()) * 100

Otros post sobre Python

Viéndolo en un ejemplo practico seria esto:

import pandas as pd 
import numpy as np 

#tenemos una matriz accesorios con dos columnas (periodos y cantidad)   
accesorios = { 
     'periodos': ['periodo_1', 'periodo_2', 'periodo_3', 
             'periodo_4', 'periodo_5', 'periodo_6', 
             'periodo_7'], 
     'cantidad': [100, 40, 47, 78, 89, 78, 64]} 

# instanciamos accesorios como un dataframe de pandas,
# y definimos sus columnas
   
accesorios = pd.DataFrame(accesorios,  
                   columns = ['periodos', 
                             'cantidad']) 
# calculamos la columna porcentaje, la cual se añade automaticmente # al dataframe accesorios. Dividimos la cantidad entre la suma de 
# la columna y la multiplicamos por 100
accesorios['porcentaje'] = (accesorios['cantidad'] / 
                  accesorios['cantidad'].sum()) * 100
  
accesorios

Como ven hemos calculado el porcentaje de la columna para saber que magnitud del total representa cada período.

La salida es:

Out[1]:
	periodos	cantidad	porcentaje
0	periodo_1	100	20.161290
1	periodo_2	40	8.064516
2	periodo_3	47	9.475806
3	periodo_4	78	15.725806
4	periodo_5	89	17.943548
5	periodo_6	78	15.725806
6	periodo_7	64	12.903226

Y esto es todo, espero ayudar a alguien con este post.

No discutas nunca con un imbécil, te llevará a su terreno y allí te ganará por experiencia

D.

El uso del método Chunk()

laravel

El método Chunk es un método que ofrece Laravel para trabajar con colecciones. Su potencia es realmente impactante, a la hora de operar con grandes datasets, ya que nos permite separar en trozos la cantidad de datos con los que trabajar

Otros posts sobre Laravel

Si en Eloquent para obtener todos los registros de un modelo y mostrarlos en nuestro Blade,  hacemos algo asi:

$tareas = Tarea::all();
foreach ($tareas as $tarea) {
    // ...

Con Chunk haríamos esto:

Tareas::chunk(100, function ($tareas) {
    foreach ($tareas as $tarea) {
        // ...
    }
});

Y listo, esto es todo.

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

Gracias.

Subir montañas hermana hombres……

Redondear decimales en Pandas con round y decimal

logo pandas

En esta ocasión hablaré de como redondear decimales en Pandas con round() y decimal().

Ya en antes, he hablado, de lo que significa, y cómo aplicar el redondeo de la mejor forma posible en Python.

Sabemos, que existen múltiples ocasiones, en las que podemos necesitar sustituir un valor de tipo entero, por otro con una cantidad de decimales dada;  o directamente asignar solo una cantidad de decimales a todos los valores dentro de una dataframe.

Veamos un ejemplo para mostrar las diferentes opciones.

Primero importamos las librerías.

Importamos el dataframe

Redondear decimales usando round() en Pandas

Es una función que  redondea un número de coma flotante, al número de lugares decimales proporcionados como segundo argumento de la función.

Su sintaxis es round(value, numero de decimales)

En este ejemplo redondeamos la columna 2 de un dataframe

Primero aplicamos la función series() de Pandas, definimos la función round() con los espacios que deseamo, para luego aplicar un bucle for, para recorrer la columna.  

En este caso la labor de round(), es colocar una coma flotante, y dejar la cantidad de decimales que le indicamos al redondear, como segundo parámetro.

Format() como apoyo

Otra forma, es utilizar format(), pero como su nombre indica, por si sola, no redondea, sino que formatea la salida de la cadena, dandole la estructura que deseamos.

format() es una propiedad de string, o sea trabaja con una cadenas, y por lo tanto no debe confundirse con valores numéricos

La sintaxis es algo como lo que sigue, cuando la usamos en solitario, aunque existen multiples combinaciones para aplicar formato.

En este caso estamos formateando la salida de un valor a porcentaje con solo dos decimales.

df['columna3'] = pd.str(["{0:.2f}%".format(val * 100) for val in df[' columna3']])

El formato de cadena le permite representar los números como desee. Puede cambiar el número de lugares decimales que se muestran cambiando el número antes de la f.  

Redondear decimales usando Decimal

Cuando necesitamos una adecuada precisión es recomendable usar decimal, ya que es mucho mas adecuado que round(), si buscamos exactitud.

Puedes ver este articulo sobre la diferencia entre round() y decimal()

La construcción de la sintaxis es como se ve en el ejemplo:

En el primer caso, solo ejecutamos una división, donde obtenemos un número de coma flotante.

En los ejemplos siguientes, lo que hacemos en indicarle a Python que estamos esperando un resultado en formato decimal.

En el segundo tomamos algunas de las propiedades del contexto y le decimos a Decimal que tipo de redondeo queremos.

En el tercer y ultimo calculo, solo tomamos el contexto predeterminado e indicamos el nivel de precision que deseamos.

En todos los casos hemos redondeado a dos espacios pero podríamos haber fijado cualquier cantidad de dígitos, que necesitáramos.

..se me ha olvidado ya el lugar de donde vengo, y puede que no exista el sitio adonde voy…

J.Sabina

Relaciones en Laravel

laravel

Establecer y definir correctamente las relaciones en Laravel cuando construimos una APP, es uno de los pasos más importantes para lograr una solución solida y escalable.

Las relaciones que se dan entre los modelos son la base de todo lo que haremos después.

Laravel aporta una estructura sencilla para construir sus modelos y relaciones, dentro del mundo de Eloquent, el cual aporta un conjunto de convenciones, que en esencia son estas

Convenciones de Eloquent Model

Los nombres de la tablas se escriben en minúsculas, corresponderán con el nombre del modelo y se le agrega una  s, y   si el modelo   tiene un nombre compuesto por dos palabras, la s se añade al final de todo, separando las palabras con una guion bajo.

De este modo , la tabla del modelo Cliente sería clientes y la de ClienteLike sería cliente_likes.
El campo primary key de una tabla debe tener el nombre de id, con el atributo AUTO_INCREMENT, en laravel 5 o bigIncrements en Laravel 6.

Los modelos son clases extienden de la clase Model, un modelo al ser creado tiene esta estructura

 <?php namespace App; use Illuminate\Database\Eloquent\Model; class NombreModelo extends Model {     // } 

Es aquí donde definiremos las relaciones y estructura del modelo, esto incluye la tabla a que se refiere, los campos que deberán ser llenados dentro de su tabla, y los cambios que queramos hacer en la estructura de la tabla que corresponde al modelo.

Otros Posts sobre Laravel

Las convenciones no son inviolables, sino una guía de organizar el código y su legibilidad pero pueden cambiarse todo lo que se desee dentro del modelo.  Por ejemplo un modelo Productos variado puede quedar así

class Producto extends Model
 {
     // cambiamos el nombre de la tabla que controla el modelo en vez de productos, trabajara con mercancia
     protected $table = 'mercancia';
 // cambiamos la clave primaria, que por defecto es id pero usaremos el código ean definiendo ese campo en la propiedad  primaryKey protected $primaryKey = 'ean_code'; // Anulamos los valores por defecto de los campos  timestamp que Laravel crea automáticamente en cada tabla, cambiando su valor a false public $timestamps = false; // asignamos  un nombre de conexión diferente protected $connection = 'connection-name'; // Establecemos aquellos atributos  a los que se les pueden asignar valores protected $fillable = ['name',’fabricante’]; // Definimos en la variable guarded, los atributos que no pueden se asignados protected $guarded = ['price',’expire_date’];
 }
 <?php namespace App; use Illuminate\Database\Eloquent\Model; class Producto extends Model {     // cambiamos el nombre de la tabla que controla el modelo en vez de  productos, trabajara con mercancia     protected $table = 'mercancia';       // cambiamos la clave primaria, que por defecto es id pero usaremos  el código ean definiendo ese campo en la propiedad  primaryKey     protected $primaryKey = 'ean_code';       // Anulamos los valores por defecto de los campos  timestamp que  Laravel crea automáticamente en cada tabla, cambiando su valor a false     public $timestamps = false;       // asignamos  un nombre de conexión diferente     protected $connection = 'connection-name';       // Establecemos aquellos atributos  a los que se les pueden asignar  valores     protected $fillable = ['name',’fabricante’];       // Definimos en la variable guarded, los atributos que no pueden se  asignados     protected $guarded = ['price',’expire_date’]; } 

Las relaciones pueden ser de uno a uno, de uno  a muchos o de muchos a muchos, hay suficiente información sobre esto en la red, muy bien explicado, pero en esencia en una aplicación donde un cliente, con un buzón de correos individual,  tendrá más de un rol, y habrá varios usuarios de la misma empresa, los modelos quedarían relacionados así.

Un cliente  con un buzón de correo (de uno a uno), pertenece solo a una empresa (de uno a uno) y un cliente tiene varios roles(relación de uno a muchos)

Como puede verse las relaciones son bilaterales, por tanto la inversa es que entre buzon y cliente también es de uno a uno, entre empresa    y clientes hay una relación de muchos a  uno  y entre roles y cliente también de uno a varios.

Cuando en ambos lados la relación es de uno a muchos,  se considera una relación de muchos a muchos y debe crearse una tabla pivote que acoja solo aquellos valores de ambos modelos que no son coincidentes y que será la tabla objeto de las consultas.

Si a las relaciones son de uno a muchos de  un lado y de uno a uno en el otro, es una relación de general de uno a muchos y si ambos lados son de uno a uno, pues asi queda de uno a uno.

Uno a Uno

Ejemplo Cliente y Buzón están relacionados uno a uno

namespace App;
use Illuminate\Database\Eloquent\Model;
class Cliente extends Model
{
public function buzon()
{
return $this->hasOne('App\Buzon');
// Si el id tiene un nombre diferente al que corresponde por convención buzons_id lo especificamos
return $this->hasOne('App\Buzon', 'code_id', 'local_key');
}
}

Definimos la otra clase

namespace App;
use Illuminate\Database\Eloquent\Model;
class Dni extends Model
{
public function cliente()
{
return $this->belongsTo('App\Cliente');
// Si el id tiene un nombre diferente al que corresponde por convención clientes_id lo especificamos
return $this->belongsTo('App\Cliente', 'nombre_id', 'local_key');
}
}

Uno a Muchos

En esta caso la definición es prácticamente igual

Una Empresa tiene muchos Clientes

namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
public function clientes()
{
return $this->hasMany('App\Cliente');
// Si el id tiene un nombre diferente al que corresponde por convención clientes_id lo especificamos
return $this->hasMany('App\Cliente', 'name_id', 'local_key'); }
}

Un Cliente pertenece a una Empresa

namespace App;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
public function empresa() { return $this->belongsTo('App\Empresa'); }
}

Muchos a Muchos

Un Cliente tiene varios Roles

namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
public function roles() { return $this->belongsToMany('App\Role');
// Si el nombre de la tabla es diferente a lo predeterminado o el ID de la tabla tiene otro nombre.
return $this->belongsToMany('App\Role', 'cliente_roles', 'name_id', 'defin_id');
}
}

Un Rol tiene varios Clientes

namespace App;
use Illuminate\Database\Eloquent\Model;
class Role extends Model
{
public function clientes() { return $this->belongsToMany('App\Cliente');
// Si el nombre de la tabla es diferente a lo predeterminado o el ID de la tabla tiene otro nombre.
return $this->belongsToMany('App\User', 'cliente_roles', 'defin_id', 'name_id');
}
}

Aquí debemos crear una tabla intermedia, con el nombre cliente_roles, de las cual será donde obtengamos los datos. La idea básica es que esta tabla tendrá los id de las tablas que la conforman y otros campos que sean interesantes tener para nuestra aplicación

Definimos en la función withPivot los campos de la tabla intermedia, y el acceso a ellos.

namespace App;
use Illuminate\Database\Eloquent\Model;
class Cliente extends Model
{
public function roles()
{
return $this->belongsToMany('App\Role', 'cliente_roles')
->withPivot('create', 'read','update', 'delete');
}
}

Y para acceder  a los datos intermediamos la palabra pivot en la solicitud/orden  que hacemos. 

$user = App\Cliente::find(1);
foreach ($cliente->roles as $role) {
    echo $role->pivot->create;
}

Ademas podemos acceder directamente a las tablas para obtener diferentes resultados

// retorna App\Buzon
App\Cliente::first()->buzon;

Nos devolverá valores del modelo Buzon

// retorna Illuminate\Database\Eloquent\Relations\BelongsToMany
App\Cliente::first()->roles();

Nos devolverá valores del modelo Role, de acuerdo a su relación con el modelo cliente

// retorna Illuminate\Database\Eloquent\Collection
App\Cliente::first()->roles;
Nos devolverá una colección 

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

Translate »