A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Eloquent: trabajando con este ORM

12/36
Recursos

Aportes 44

Preguntas 4

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

<h1>Factory()->create ya no funciona!</h1>

Desde laravel 8.0 fue actualizado Factory para que funcione como clase, ahora para llamar el factory desde Tinker es necesario llamarlo del siguiente modo:

Post::factory()->count(10)->create()

Ahora cuando se genera un Modelo con make:model creara la siguiente estructura por default:

El archivo Factory

<?php

namespace Database\Factories;

use App\Models\Post;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;

class PostFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = Post::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            // AQUI SE AGREGARA LA CLAVE MAS VALOR DE LA SIGUIENTE FORMA:
						'title' => $this->faker->sentence
        ];
    }
}

El archivo modelo:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use HasFactory;
}

Eloquent: trabajando con este ORM


Con Eloquent trabajamos el manejo de datos, este est谩 incluido en Laravel y nos ayuda a trabajar con todo lo que tenga que ver con DB.

Esta herramienta nos permitir谩 hacer consultas, eliminar, actualizar, y listar. Podremos hacer todo lo que se puede hacer con una DB sin escribir una sola l铆nea d SQL.

El comando de php artisan para crear nuevos modelos es:

php artisan make:model *nombre*

// Ej. Solo crea la migraci贸n y el factory. Si queremos que cree todo solo escribimos el par谩metro -a
php artisan make:model Post -m -f

馃搵 Un modelo es la representaci贸n de una tabla que tenemos en la DB.

Para crear una atributo/dato dentro de la tabla que acabamos de crear, vamos a database 鈫 migrations 鈫 archivo_con_nombre_de_la_tabla.php y dentro de la clase CreateNombreTable en el m茅todo Up() dentro del Shema::create escribiremos el atributo mas el tipo de dato, as铆:

class CreatePostsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();

            # As铆 creamos los atributos, indicando su tipo de dato y el nombre de este.
            $table->string('title');

            $table->timestamps();
        });
    }

Para modificar el Factory en Laravel 8x tenemos que escribir en el m茅todo definition() dentro de las llaves del return.

public function definition()
    {
        return [
            'title' => $this->faker->sentence
        ];
    }

En Laravel 8x el componente Faker ya no se como clase, ahora el componente est谩 impl铆cito en la clase del factory, y por eso tenemos que usar $this para usar faker.

Y para correr el comando dentro de php artisan tinker para crear datos en la DB utilizamos el siguiente comando:

App\Models\Post::factory(30)->create()

El 30 es el n煤mero de elementos que queremos que cree.

De la siguiente forma configuramos la ruta para que nos imprima los datos:

use App\Models\Post;
Route::get('eloquent', function () {
    $posts = Post::all();

    foreach ($posts as $post) {
        echo "<p>ID: $post->id, TITLE: $post->title</p> <br>";
    }
});

Si queremos hacer una consulta m谩s compleja, lo hacemos de la siguiente forma:

Route::get('eloquent', function () {
    $posts = Post::where('id', '>=', '20')
        ->get();

    foreach ($posts as $post) {
        echo "<p>ID: $post->id, TITLE: $post->title</p> <br>";
    }
});

// Si queremos ordenar de forma descendente y solo ver 3 items
Route::get('eloquent', function () {
    $posts = Post::where('id', '>=', '20')
        ->orderBy('id', 'desc')
        ->take(3)
        ->get();

    foreach ($posts as $post) {
        echo "<p>ID: $post->id, TITLE: $post->title</p> <br>";
    }
});

Es importante entender que:

  • Un archivo = Una tabla en la base de datos
  • La correcta manipulaci贸n de los datos.

UPDATE Laravel 8

En Laravel 8 el tema de los factories tambi茅n cambiaron, el comando para crear el factory a煤n funciona, sin embargo, al entrar a PostFactory.php notar谩s que la estructura es muy diferente.

No te preocupes, para escribir tu factory ahora tienes que buscar la funci贸n que se llama 鈥渄efinition()鈥 ver谩s que esta est谩 retornando un array vac铆o, es ah铆 en donde tienes que escribir tu factory con los datos que tienes que retornar.

Para acceder al componente 鈥渇aker鈥 ya no se usa la clase Faker, ahora este componente est谩 impl铆cito en la clase del factory, por lo que simplemente tienes que usar $this para usar faker:

"title" => $this->faker->sentence

Y por 煤ltimo, para correr tu factory, ya no se usa el helper facotry() (Fue descontinuado), ahora debes usar el modelo directamente, por eso, Laravel 8, al crear tu modelo, usa un trait llamado 鈥淗asFactory鈥

Entonces, en tinker debes correr el siguiente comando:

App\Models\Post::factory(30)->create()

El n煤mero 30 es la cantidad de registros que deseas crear

Para aclaraci贸n a nuevos usuarios en el minuto 3:50, no es crear una nueva tabla como se comenta, sino un nuevo campo de tipo string llamado title.

Compa帽eros les comparto en enlace del paquete Faker para que vean todos los tipos de datos que pueden generar, tambi茅n pueden cambiar el idioma de los datos que se generan por si les gusta personalizar esto.

Tambien importante tomar en cuenta que ya en la version 8.0 hay una carpeta para los modelos en App\Models

Hola!! Si quieren formar parte de un grupo de estudios de Devs, les dejo un link a un grupo de Telegram que est谩 muy chulo.

https://t.me/HackTzi

Tambi茅n tienen una organizaci贸n de GitHub, 煤nete por aqu铆:

https://github.com/HackTzi

Eloquent: trabajando con este ORM

Modelo: Representaci贸n de una tabla que tenemos en nuestra base de datos.

Laravel traer por defecto la representaci贸n de la tabla usuarios.

驴C贸mo crear un modelo?

Php artisan make: model nombreModelo

驴C贸mo mostrar los comandos adicionales que podemos agregar a la creaci贸n de un modelo?

Php artisan make:model -h 

驴C贸mo correr una migraci贸n en Laravel?

Php artisan migrate

Configuraci贸n de la base de datos

  1. Ir al archivo .env

  2. Configurar las credenciales de nuestra db

DB_CONNECTION=mysql
	DB_HOST=127.0.0.1
	DB_PORT=3306
	DB_DATABASE=eloquent
	DB_USERNAME=root
	DB_PASSWORD=
  1. Entramos a la consola de tinker para poder revisar si quedo configurada correctamente la db usando el comando php artisan thinker

  2. Revisamos la conexi贸n entre Laravel y nuestra db en mysql usando el comando

DB::connection()->getPdo(); 

En caso de estar bien la conexi贸n nos devolver谩 informaci贸n referente a la misma y de lo contrario un error, que con una poco de b煤squeda podremos solucionar.

Nota: Por convenci贸n los nombres de los modelos deben ser escritos en singular y en ingl茅s, para poder formar as铆 sus migraciones, factory etc鈥

Seteo de la migraci贸n de post

驴C贸mo puedo agregar una nueva columna a una migraci贸n?

$table->string('nombrecolumna',longitud);

Ejemplo titulo de post

$table->string('title');

Si no especificamos la longitud de la columna a utilizar se pondr谩 por defecto de 255.

驴C贸mo configurar un factory en Laravel para poder crear datos de prueba?

  1. Entro a tinker -> php artisan thinker

  2. Utilizo factory(App\Post::class,30)->create() para poder crear datos de prueba

1 creamos el model . la migracion y la factory
php artisan make:model Post -m -f


2 conexion a abase de datos
-creamos una base de datos en mysql o tu DB
-vamos a la carpeta database/migrations al arcivo cre creamos con el commando en el punto 1
y configuramos la columna title
-agregamos el nombre de nuestra DB en el archivo .env

3 TERMINAL php artisan migrate enviamos nuestras tablas a DB

4 -volvemos a tinker y crearemos 30 posts
	factory(App\Post::class, 30)->create()

5 configuramos rutas y metods

-Route::get(鈥/eloquent鈥, function () { TODOS LOS CAMPOS
$posts = Post::all();

-Route::get(鈥/eloquent鈥, function () { TODOS LOS CAMPOS MAYORES A 20
$posts = Post::where(鈥渋d鈥, 鈥>=鈥, 鈥20鈥)->get();

-Route::get(鈥/eloquent鈥, function () { TODOS LOS CAMPOS MAYORES A 20 DE MAY A MEN
$posts = Post::where(鈥渋d鈥, 鈥>=鈥, 鈥20鈥)
->orderBy(鈥渋d鈥,鈥desc鈥)
->get();

Route::get(鈥/eloquent鈥, function () { campos 30 29 28
$posts = Post::where(鈥渋d鈥, 鈥>=鈥, 鈥20鈥)
->orderBy(鈥渋d鈥,鈥desc鈥)
->get();

Aqu铆 hay mas documentaci贸n https://laravel.com/docs/7.x/eloquent

Excelentee xplicacion, me dio muchos problemas por que estoy en laravel 8 pero nada que la comunidad no me pudiera ayudar.

Creo que por fin lo he entendido. Cualquier cosa corregirme, que estar茅 encantada de aprender.
Para tenerlo claro, por un lado:
1潞. Hay que crear una base de datos en phpMyAdmin
2潞. Asociarla la DB, a nuestro proyecto en el archivo de env. 飪 DB_DATABASE=
Y por otro:
1潞. Crear un modelo con nombre de la tabla, en la terminal. (As铆 se crea la tabla)
2潞. En la carpeta de migraciones, tenemos el modelo. Aqu铆 podemos modificar los atributos de la tabla.
3潞. Ejecutando el comando de migrate, se realizan los cambios en la tabla que hay en la DB.

Si aparece el error 鈥Specified key was too long error鈥 al ejecutar el comando php artisan migrate, se debe a帽adir en el fichero 鈥app\Providers\AppServiceProvider.php鈥:


use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;

public function boot()
{
Schema::defaultStringLength(191);
}

Referencia: https://aprendible.com/blog/como-solucionar-el-error-specified-key-was-too-long-error-en-laravel

El m茅todo take es similar al limit el cual trae un n煤mero determinado de registros que le asignamos.

Cuando se esta realizado el print de los datos, se tiene que llamar a

use App\Models\Post;

Esta es una actualizaci贸n de Laravel.

Utilizando las migraciones, como hago para actualizar una tabla ya existente? se puede hacer eso?

Bueno pues a mi no me permitio visualizar la informacion igual que al profesor, por lo que puedo entender es algo en la ruta,estoy manejando XAMPP y veo a muchos compa帽eros con el mismo problema 馃槮 En la anterior seccion no hubo pobrema ya que ingresaba al Service.php y podia realizar lo mismo que el profesor pero en este caso por mas que intente no fue posible 馃槓

Por alguna raz贸n que desconozco la tabla de post no se migro a la base de datos y tuve que crearla manual, esta no arrojaba ningun error ni nada y me decia que ya estaba creada pero no aparecia en la base de datos. de resto todo perfecto

Gracias al factory, podemos configurar datos falsos para realizar pruebas, para esto primero debemos de configurar el archivo de factory correspondiente al modelo

La consola de comandos de Laravel nos permite crear varias cosas de una vez, para crear un modelo, con su migracion y su factory de una mes es cuestion de agregarle los parametros opcionales requeridos
por ejemplo:

php artisan make:model Post -m -f

La ruta de los factories es:

database > factories > archivoFactory.php

Teniendo una base de datos existente, existe alguna manera para hacer una inversa y crear las migraciones, o se haria manualmente las migraciones, y hacer un backup de los datos existentes, o exite algun tipo de comando ?

Para crear un modelo, el factory y la migraci贸n en un proyecto de Laravel, hacemos uso del siguiente comando:

php artisan make:model Post -m -f

Post hace referencia al nombre de mi modelo (una buena pr谩ctica es colocarlo en singular).


-m hace referencia a la creaci贸n de la migraci贸n


-f hace referencia a la creaci贸n de mi factory

A mi me funcion贸 de la siguiente manera

factory(App\Post::class, 48)->create();

c贸mo puedo hacer para que por defecto al crear los modelos se creen, por ejemplo, en App\Models?

Route::get('eloquent', function () {
    $posts = Post::where('id','>=','10')
    ->orderBy('id','DESC')
    ->take(3)
    ->get();

    foreach ($posts as $post) {
        echo "$post->id $post->title <br>";
    }
});

Cuando trabajamos con eloquent ORM debemos tener en cuenta que un archivo(app/Models/Post.php) representa una tabla en nuestra base de datos.馃搶

Lo m谩s importante en cualquier sistema es la correcta manipulaci贸n de datos.鉁

El profe explica tan bien que todav铆a no hay preguntas 馃槃

Documentacion de Eloquent para Laravel 8: https://laravel.com/docs/8.x/eloquent

Hola, tengo un error a la hora de ejecutar php artisan migrate :
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution (SQL: select * from information_schema.tables where table_schema = eloquent and table_name = migrations and table_type = 鈥楤ASE TABLE鈥)

Me podrian ayudar, estoy usando Homestead, la version de laravel es v8 .

Parece que ahora para test se usa la clase Factory en Models
https://laravel.com/docs/7.x/database-testing

hola como puedo hacer para ver lo de las rutas usando xampp porque el escribe eloquen.test/eloquent y lo puede ver pero yo no puedo hacer eso alguien me ayuda?

Con los Factory, Laravel nos facilita las pruebas.

No ser铆a m谩s prolijo contar con todos los modelos dentro de un directorio Models? algo como App\Models? qu茅 opinan?

Laravel permite consultar informaci贸n en las bases de datos sin digitar ni una l铆nea de SQL, tocara que aprender nuevos m茅todos.

cuando d铆gito en la terminal el comando, php artisan migrate me est谩 saliendo el siguiente error, alguien me puede ayudar a solucionar este error por favor Illuminate\Database\QueryException : SQLSTATE[42000]: 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))

C:\xampp\htdocs\eloquent\vendor\laravel\framework\src\Illuminate\Database\Connection.php:669

//If an exception occurs when attempting to run a query, we鈥檒l format the error
// message to include the bindings with SQL, which will make this exception a
//lot more helpful to the developer instead of just the database鈥檚 errors.
catch (Exception $e) {
throw new QueryException(
$query, $this->prepareBindings($bindings), $e
);
}

Exception trace:

PDOException:馃槮鈥淪QLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes鈥)
C:\xampp\htdocs\eloquent\vendor\laravel\framework\src\Illuminate\Database\Connection.php:463

PDOStatement::execute()
C:\xampp\htdocs\eloquent\vendor\laravel\framework\src\Illuminate\Database\Connection.php:463

Please use the argument -v to see more details.

Si queremos saber que otras opciones podemos tener en los comandos solo basta con adicionarl al final el comando 鈥揾elp
ejemplo:

php artisan make:model --help

Al momento de crear un modelo este debe de nombrarse en inlges y singular, ya que al momento de crear las migraciones autom谩ticas el comando genera las tablas agreg谩ndole una s para que quede en plural en la BD

Excelente el uso de eloquent

Si est谩n usando Laravel 7.x.x y tienen conflictos al migrar el modelo Post a la base de datos, actualicen la siguiente ruta:

app\Providers\AppServiceProvider.php

Actualicenlo con el siguiente c贸digo:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Schema::defaultStringLength(191);
    }
}

Y luego ejecuten php artisan migrate. 馃槂

Que 鈥減oderoso鈥 me ha parecido hasta ahora Laravel, y con Eloquent a煤n m谩s. Me est谩 encantando este framework y tambi茅n el curso.

Por si alguien m谩s se encuentra con un error parecido a este:

 Illuminate\Database\QueryException 

  could not find driver (SQL: select * from information_schema.tables where table_schema = eloquent and table_name = migrations and table_type = 'BASE TABLE')

a la hora de hacer las migraciones en una distribuci贸n basada en arch, la soluci贸n es bastante simple, solo que algo dif铆cil de encontrar.
Solo hay que editar el archivo /etc/php/php.ini y descomentar las siguientes l铆neas:

;extension=pdo_mysql
;extension=pdo_sqlite

PD: Para descomentarlas solo hay que eliminar el punto y coma al principio de la l铆nea.

Dejo por aqu铆 el link de los Query Builder que ofrece Laravel.

Creo que es muy importante conocer c贸mo y en que forma podemos hacer querys para comunicarnos con la base de datos.