Ordenar por tipo de relaciones

laravel

Un modo de organizar los resultados es ordenar por relaciones, esto nos permite tomar por ejemplo el ultimo registro añadido.

Digamos que tenemos un modelo Pedido, relacionado con el modelo Cliente y queremos que nos muestre en la vista los pedidos colocando encima el último.   

Lo primero seria describir la relación entre ambos dentro de la clase Cola

public function lastestPedido()
{
    return $this->hasOne(\App\Pedido::class)->latest();
}

En el controlador  creamos una variable que en su interior tomará los  pedidos según clientes ordenados de forma descendente, según fecha de creación.

$clientes= Cola::with('latestPedido')->get()->sortByDesc('latestPedido.created_at');

Y listo, esto es todo.

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

Gracias.

Subir montañas hermana hombres……

Relaciones con condicionales y ordenadas

laravel

Hablemos de las relaciones con condicionales y ordenadas, no es la forma común en que definimos una relación en Laravel. Lo típico es algo así:

public function camiones() {
    return $this->hasMany('App\Camione');    
}

Sin embargo, esto podemos enriquecerlo si deseamos obtener esa relación ordenada según algún criterio.

Más de Laravel

En el código siguiente lo ordeno por capacidad de carga.

public function contratoCamiones() {
    return $this->hasMany('App\Camiones')->where('contrato', 1)->orderBy('capacidad');
}

Y listo, esto es todo.

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

Gracias.

Subir montañas hermana hombres……

Comandos para crear un proyecto en Laravel

laravel

He aquí dos sencillos comandos para crear un proyecto en Laravel, que siempre nos serán útiles y necesarios.

Crear proyecto

composer create-project --prefer-dist laravel/laravel nombre del proyecto

Crear modelos y toda la estructura al mismo tiempo

php artisan make:model Company-mcr
•	-m  crea el archivo de la migración o sea la tabla
•	-c   crea  el controlador
•	-r   indica que el controlador es un controlador de recurso preparado para un CRUD(create, read, update, delete), compatible con REST

Y listo, esto es todo.

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

Gracias.

subir montañas hermana hombres…..

Instalar una versión anterior en Laravel

laravel

Una de las cuestiones que podemos necesitar hacer es instalar una versión anterior en Laravel.

Las razones pueden ser varias : estudiar las modificaciones entre versión y versión, mantener la compatibilidad de un proyecto, o de un desarrollo previo, testear una app, o como sucede en algunos servidores cloud, adecuarse a la versión de que estos disponen.

La solucion es sencilla y composer nos permite incorporarla al iniciar nuestro proyecto

Basta con añadir a la consola la versión que necesitamos:

 composer create-project laravel/laravel [nombreproyecto] [version.*]

seria algo como esto:

composer create-project laravel/laravel ProyectoTest 6.*

Aquí estamos instalando la versión 6 en su última variante, podríamos escribirlo también asi:

composer create–project laravel/laravel=6.* ProyectoTest

Donde 6 será la versión que necesitamos, acepta  incluso 6.2  o 5.1, y el asterisco indica dentro de ella la que incorpora la última actualización, lo  que significa que se han  reparado los bugs, o sea es una versión Bugfixed.

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

El uso de save

laravel

El método Save,  tiene multiple usos en laravel y es una de esas herramientas que siempre es bueno tener a mano. Aquí les muestro algunos usos

Save con condición

En el siguiente ejemplo le pasamos a una función Save, un array con las opciones , y como puede apreciarse en la función protegida, pasamos el arreglo options condicionandom que si se cumplen determinada condición se actualice el Timestamp, al final a la variable products, le pasamos la función save() con el parámetro que necesitamos.

// src/Illuminate/Database/Eloquent/Model.php
public function save(array $options = [])

// src/Illuminate/Database/Eloquent/Model.php
protected function performUpdate(Builder $query, array $options=[])
{
  if ($this->timestamps && array_get($options, 'timestamps', true))
	{
	  $this->updateTimestamps();
	}
}

$product = Product::find($id);
$product->updated_at = '2015-01-01 00:00:00';
$product->save(['timestamps'=>false]);

Para devolver relaciones de los modelos

En este caso vemos su uso en el método store, donde le indicamos que si el usuario está autenticado guarde el  nuevo Post.

public function store()
{
	$post = new Post;
	$post->fill(Input::all());
	$post->user_id = Auth::user()->user_id;

	$post->user;

	return $post->save();
}

Tiene otros usos más, por ejemplo para insertar registros en la base de datos, dentro de los métodos update o store, en los controladores

Y listo, esto es todo.

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

Gracias.

Subir montañas hermana a los hombres……

Serializar y deserializar en Laravel.

laravel

Al estar desarrollado sobre PHP, utiliza también las propiedades para serializar y deserializar en Laravel.

Laravel  posee una Api que trabaja en segundo plano, cuyo  nombre es Queue, que se vincula estrechamente a la clase Job, para ejecutar tareas de modo asíncrono.

Job por su parte, es una clase tipo Trait, que posee un conjunto de parámetros. Sus instancias son objetos que serán alineados dentro de la cola, en su momento, y extraídos al ser ejecutados.

Es en su uso donde tenemos un ejemplo de la importancia del uso de la serialización:

Los valores que recibe la clase,  son  contenidos dentro de un objeto Php (que no es más  que un array  de su tipo) y necesitan ser pasados a los modelos.

Un elemento que hemos de saber para entender esto es que:   un array de este tipo, fuera de un script Php, no puede ser usado, y  por tanto  no puede ser introducido  directamente en la base de datos, ni leído como otro tipo de file diferente al Php.

Para lograrlo PHP(Laravel), lo lleva a un formato que pueda se común a otros lenguajes, o sea los serializa primero, los añade al  modelo(objeto) y al obtenerlos de vuelta los des-serializa.

Dicho de un modo más  resumido aun: la serialización en si,  consiste en pasar los datos de un objeto  a un formato de string  y guardarlos en la BD.

Solo las propiedades del objeto aceptan ser serializadas.

Si entendemos el sistema de modelos de Laravel, entonces comprenderemos  que al convertir un modelo(objeto) en serializado, ejemplo un determinado Job, estamos preparando para que los valores de sus columnas puedan ser convertidos a  un tipo de string ,específico reconocido por el Framework, guardados en la BD y en el momento de su ejecución, extraídos, leídos y reconvertidos a una sintaxis original.

Esto puede sin dudas, compararse con convertir los datos a JSON, cuando intentamos conectar con Javascript.

En definitiva ambas son alternativas de PHP, para transmitir datos que necesitan ser procesados por otras aplicaciones.

Laravel lo usa en las colas (queues) y los trabajos(Jobs), y su gran ventaja es que Laravel (Php) no solo recuerda el tipo de dato nativo para cada ítem serializado, sino que además luego de des-serializar el método, este desaparece.

La validez de la necesidad de su uso, no solo son las colas, podríamos necesitar utilizarlo para aquellos casos en los que trabajamos con valores cuyo uso es temporal: por ejemplo para procesar   un modelo que contabiliza las conexiones diarias a la bd de un determinado grupo de empleados.

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

El uso de with en Blade

laravel

Puedes hacer esto en la plantilla de tu aplicación, empleando el with en Blade, en modo dinámico, uniéndolo al nombre del modelo.

Post::whereSlug('slug')->get();

// en  vez de esto
View::make('posts.index')->with('posts', $posts);

// podemos hacer esto
View::make('posts.index')->withPosts($posts);

Y listo, esto es todo.

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

Gracias.

Subir montañas hermana a los hombres……

Resolver error Could not open input file: artisan

laravel error

Un error común al intentar instalar Laravel es Could not open input file: artisan:

 Could not open input file: artisan

Para corregirlo correr composer install

Composer could not find a composer.json file in C:\xampp\htdocs\portfolioTo initialize a project, please create a composer.json file as described in the https://getcomposer.org/ "Getting Started" section

Esto sucede cuando has creado un proyecto y has descargado y extraido laravel desde el repositorio en GitHub, no utilizando el comando de  Composer

composer create-project laravel/laravel your-project-name

Y esto se debe a que las dependencias que Composer maneja no están instaladas, por lo tanto la carpeta vendor que contiene a Artisan no ha sido creada.

La solución a este problema es correr el comando composer install, en la carpeta raíz  del proyecto, para ello lo que recomiendo es  borrar la carpeta de nuestro proyecto y corriendo todo el proceso de nuevo.

Artisan incorpora Laravel por defecto, por tanto si php esta correctamente instalado lo único que necesitas es navegar hasta la carpeta raíz del proyecto, o sea la carpeta dentro de la cual hallaremos  la carpeta App

cd c:\Program Files\xampp\htdocs\your-project-name

Corremos

composer global require "laravel/installer" 

el cual actualizara composer a nivel de variables de entorno generalmente en

C:/Users/nombredeusuario/AppData/Roaming/Composer

Y luego creamos nuestro proyectos ubicados en el root del servidor local

En mi caso xampp

C:\xampp\htdocs>composer create-project laravel/laravel nombre_del_proyecto

Luego pasamos al proyecto creado e iniciamos, el serve de artisan, para comprobar que funciona.

También podemos comprobar la version de composer corriendo composer -v

C:\xampp\htdocs\ nombre_del_proyecto >php artisan serve

Una vez hecho esto el comando php artisan list por ejemplo debe correr perfectamente, porque PHP, estará llamando al archivo “artisan”, que se encuentra dentro de la carpeta del proyecto

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

Obtener filas aleatorias

laravel

Para obtener filas aleatorias de la base de datos, ya sea para testear o para ofrecer información que podemos querer incluir en nuestra aplicación Laravel , basta con usar la cláusula OrderByRaw y Rand()

$filas_aleatorias = Filas::orderByRaw('RAND()')->take(10)->get();

Y listo, esto es todo.

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

Gracias.

Subir montañas hermana a los hombres……

Obteniendo childrows

laravel

Cuando en una consulta, necesitamos obtener filas relacionadas, o childrows, podemos hacerlo a través de la combinación de varias cláusulas.

En este caso tenemos un modelo Tareas relacionado con Clientes, en una relación uno a muchos(hasMany). Lo que hará esta consulta que plantea la función getIndex() es consultar la tabla tareas y devolvernos aquellos  clientes que poseen tareas asignadas y pasarlos a la vista index, dentro de la carpeta clientes.

class Cliente extends Model
{
 public function tareas()
 {
 return $this->hasMany('App\Tarea');
 }
}

public function getIndex()
{
 $clientes = Cliente::with('tareas')->has('tareas')->get();
 return view('clientes.index', compact('clientes'));
}

Y listo, esto es todo.

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

Gracias.

..Subir montaña hermana hombres…..

Translate »