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

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

Crear relaciones condicionales

laravel

La claúsula where tiene muchos usos dentro de Laravel y su uso nos facilita mucho las cosas, y entre ellas crear relaciones condicionales. Algunos de estos casos son:

Crear relaciones condicionales

Puedes crear relaciones condicionales utilizando where. Con el  puedes devolver una relación entre, por ejemplo entre los modelos Tareas y Categorias, condicionada esta por el  id del usuario

class NombreModelo extends Model
{
        public function Tareas()
        {
               return $this->belongsTo('Categorias', 'categories_id')
                       ->where('users_id', Auth::user()->id);
        }
}

Actuar como condicional directo

Aquí vemos tres formas de tomar todos las tareas correspondientes a la categoría 1, utilizando where y get

$tareas = Tarea::where('categoria', '=', 1)->get();
$tareas = Tarea::where('categoria', 3)->get();
$tareas = Tarea::whereCategoria(3)->get();

Filtrar fechas con whereDate

Puedes utilizar whereDate para seleccionar o filtrar fechas por diferentes condiciones sea año, día o mes.

$q->whereDate('created_at', date('Y-m-d'));
$q->whereDay('created_at', date('d'));
$q->whereMonth('created_at', date('m'));
$q->whereYear('created_at', date('Y'));

Dentro de una closure al construir una consulta mas compleja en Eloquent

Un ejemplo típico es cuando tenemos que construir una consulta que devuelva resultados dentro de un rango, por ejemplo  donde necesitamos recibir solo las tareas de una categoría dada, y que estén relacionadas con una cantidad de usuarios determinados.

Seria algo asi :

... WHERE (tareas = 'tarea1' and cantidadUsuarios >= 5) or (tareas = 'tarea2' and age >= 8)
Lo mas rápido seria construir algo como esto:
$q->where('tareas', 'tarea1');
$q->orWhere('cantidadUsuarios', '>=', 5);
$q->where('tareas', 'tarea2');
$q->orWhere('cantidadUsuarios', '>=', 8);

En esta construcción de la consulta, el orden no es el correcto y podría no ser todo lo eficiente que ncesitamos; la solución en Laravel entonces, pasa por  utilizar una función anónima que  incluya otras funciones closure como subconsultas:

$q->where(function ($query) {
    $query->where('tareas', 'tarea1')
        ->where('cantidadUsuarios', '>=', 5);
})->orWhere(function($query) {
    $query->where('tareas', 'tarea2')
        ->where('cantidadUsuarios', '>=', 8); 
})

De este modo quedan organizadas las consultas en una sola estructura solida e integral, pero al mismo tiempo fácilmente escalable.

El uso de  orWhere con parámetros multiples

Siguiendo con el ejemplo anterior, vemos que utilizamos de modo alterno el Where y el orWhere, pero si los parámetros son múltiples, al estar haciendo algo asi:

$q->where('a', 1);
$q->orWhere('b', 2);
$q->orWhere('c', 3);

Podríamos hacer una consulta un poco larga, la cual podemos acortar, estructurandola asi:  

$q->where('a', 1);
$q->orWhere(['b' => 2, 'c' => 3]);

WhereX

Con Laravel puedes añadir where al nombre del modelo y hacer aun más elegante tus queries, por ejemplo convertir esto :

$users = User::where('tareas', 1)->get();

En esto:

$users = User::whereTarea(1)->get(); 

Asi de sencillo,  y además ya Laravel trae algunos predefinidos como  whereDate, whereDay, whereMonth y whereYear, relacionados con date y time, lo cuales se comportan asi:

User::whereDate('created_at', date('Y-m-d'));
User::whereDay('created_at', date('d'));
User::whereMonth('created_at', date('m'));
User::whereYear('created_at', date('Y'));

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

El uso de replicate

laravel

Replicate es un método que nos da Laravel para hacer copias de registros en la base de datos, para usarlo basta con esto:

$tareas =Tarea::find(1);
$newTarea = $tareas->replicate();
$newTarea->save();

Y listo, esto es todo.

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

Gracias.

Subir montañas hermana hombres……

Translate »