3. Llenar con datos falsos la bbdd de un blog


13 comentarios

Inicia sesión para comentar

Comentarios:

  • Kevin Sayago Rosales

    Kevin Sayago Rosales hace 1 semana

    Me pone el siguiente error, voy en el min 30:40:  
    Dropping all tables ......................................................................... 230.67ms DONE

      INFO  Preparing database.  

     Creating migration table ..................................................................... 17.41ms DONE

      INFO  Running migrations.  

     0001_01_01_000000_create_users_table ........................................................ 102.52ms DONE
     0001_01_01_000001_create_cache_table ......................................................... 28.24ms DONE
     0001_01_01_000002_create_jobs_table .......................................................... 88.40ms DONE
     2025_01_16_002935_add_two_factor_columns_to_users_table ...................................... 26.84ms DONE
     2025_01_16_003248_create_personal_access_tokens_table ........................................ 52.74ms DONE
     2025_01_16_014909_create_categories_table .................................................... 14.78ms DONE
     2025_01_16_015430_create_posts_table ........................................................ 176.38ms DONE
     2025_01_16_020222_create_tags_table .......................................................... 16.59ms DONE
     2025_01_16_020550_create_post_tag_table ..................................................... 155.64ms DONE
     2025_01_17_005400_create_images_table ........................................................ 14.20ms DONE


      INFO  Seeding database.

     Database\Seeders\UserSeeder ....................................................................... RUNNING  
     Database\Seeders\UserSeeder ................................................................... 751 ms DONE  


      BadMethodCallException

     Call to undefined method App\Models\Category::factory()

     at vendor\laravel\framework\src\Illuminate\Support\Traits\ForwardsCalls.php:67
        63▕      * @throws \BadMethodCallException
        64▕      */
        65▕     protected static function throwBadMethodCallException($method)
        66▕     {
     ➜  67▕         throw new BadMethodCallException(sprintf(
        68▕             'Call to undefined method %s::%s()', static::class, $method
        69▕         ));
        70▕     }
        71▕ }

     1   vendor\laravel\framework\src\Illuminate\Support\Traits\ForwardsCalls.php:36
         Illuminate\Database\Eloquent\Model::throwBadMethodCallException("factory")

     2   vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php:2368
         Illuminate\Database\Eloquent\Model::forwardCallTo(Object(Illuminate\Database\Eloquent\Builder), "factory")

  • Ed

    Ed hace 2 semanas

    Yo tengo problemas con las imagenes  no se descargaban y lo solucione con este link https://dev.to/cybert22/crea-imagenes-elegantes-de-prueba-en-laravel-alternativas-a-fakerphp-57gm

  • Steven Ortiz

    Steven Ortiz hace 8 meses

    Víctor es normal que aveces no se guarde o se cargue el total de imágenes te consulto porque en la tabla images se guardo una que otra URL por ejemplo posts/0e4d1c7e18a1bf5ceef0ac59ce779fce.png    pero  otras si no se cargaron  si no que solo se cargo  esto posts/  … ves unas si las cargo otras no es normal que falle la carga

    • Victor Arana Flores hace 7 meses

      Hola Steven, a veces falla el servidor de imagenes que usa faker

  • Jose

    Jose hace 1 año

    Me continua dando el error de que no se puede crear e directorio posts.  No se si con esto que dejo podrias decirme por donde va el error xq añadi las lineas que pusiste “use Illuminate\Support\Facades\Storage;” en DatabaseSeeder. 

    *****

      Cannot write to directory "public/storage/posts"

     at vendor\fakerphp\faker\src\Faker\Provider\Image.php:128
       124▕
       125▕         $dir = null === $dir ? sys_get_temp_dir() : $dir; // GNU/Linux / OS X / Windows compatible
       126▕         // Validate directory path
       127▕         if (!is_dir($dir) || !is_writable($dir)) {
     ➜ 128▕             throw new \InvalidArgumentException(sprintf('Cannot write to directory "%s"', $dir));
       129▕         }
       130▕
       131▕         // Generate a random filename. Use the server address so that a file
       132▕         // generated at the same time on a different server won't have a collision.

     1   vendor\fakerphp\faker\src\Faker\Generator.php:696
         Faker\Provider\Image::image("public/storage/posts")
     2   vendor\fakerphp\faker\src\Faker\Generator.php:696

    • Donmartín Works hace 1 año

      yo uso L10, yo lo solucioné de la siguiente manera: en DatabaseSeeder cambie Storage::makeDirectory('posts');  =>  Storage::makeDirectory('public/posts');

    • Andres hace 1 año

      tenia el mismo problema lo soluciones con tu respuesta, gracias.

    • Pablo Cs:go hace 1 año

      Me pasó exactamente lo mismo, muchas gracias!

  • Sebastian Chinga

    Sebastian Chinga hace 2 años

    Hola Victor repasando este video mi pregunta es la siguiente, como hago para el siguiente caso:

    Quiero almacenar imagenes de unos productos y de categorias, por lo tanto las imagenes de los productos se almacenaran en la carpeta public/storage/products y las imagenes de las categorias seran almacenadas en la carpeta public/storage/products/categories; osea las imagenes de los productos y las categorias en carpetas separadas. Logre crear la carpeta ‘products’ y dentro logre crear la carpeta ‘categories’. Ahora como hago para que las imagenes se almacenen en sus respectivas carpetas? Teniendo en cuenta que se trabaja con los factories y los seeders. Espero me responda la duda. Saludos.

  • Leenh Alexander Bustamante Fernandez

    Leenh Alexander Bustamante Fernandez hace 2 años

    Las imágenes desaparecen, al hacer la migracion las imagenes parecen descargar pero luego desaraparecen, podrias ayudarme?

    edite este comentario 3 veces jejej al final logre solucionar los problemas con las imagenes

    • Hansb hace 2 años

      Cómo solucionaste jjj?

    • Leenh Alexander Bustamante Fernandez hace 2 años

      cambia la url de donde descargas la imagen

       

  • Crlos Nuñez

    Crlos Nuñez hace 2 años

    me arroja 2 problemas

     C:\xampp\htdocs\blog\vendor\laravel\framework\src\Illuminate\Events\Dispatcher.php:252
         Illuminate\Events\Dispatcher::Illuminate\Events\{closure}("eloquent.created: App\Models\User")

     2   C:\xampp\htdocs\blog\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasEvents.php:188
         Illuminate\Events\Dispatcher::dispatch("eloquent.created: App\Models\User")

    • Crlos Nuñez hace 2 años

      Array callback must have exactly two elements

       at C:\xampp\htdocs\blog\vendor\laravel\framework\src\Illuminate\Events\Dispatcher.php:424
         420▕             if ($wildcard) {
         421▕                 return $listener($event, $payload);
         422▕             }
         423▕
       ➜ 424▕             return $listener(...array_values($payload));
         425▕         };
         426▕     }
         427▕
         428▕     /**

  • Danny Pascual Gomez Sanchez

    Danny Pascual Gomez Sanchez hace 2 años

    Se puede hacer uso de la función imageUrl generando el parametro word aleatorio para no repetir imagenes. comparto la solición.
     

    1. En ImageFactory => 
      public function createPostImage(){

        return $this->faker->imageUrl(640, 480, 'business', true, $this->faker->word(5).' - Posts - @pascualdas');

    }

    public function createUserImage(){

        return $this->faker->imageUrl(640, 480, 'people', true, $this->faker->word(5).' - Users - @pascualdas');

    }

     

    2. En UserSeeder => 

     

    $users = User::factory(99)->create();

            foreach ($users as $user){


     

                $image = $imgGenerator->createUserImage();

     

                Image::factory(1)->create([

                    'url' => $image,

                    'imageable_id' => $user->id,

                    'imageable_type' => User::class,

                ]);

            }

    Nota: Yo implemente imagenes para  usuarios y posts.

    • Victor Arana Flores hace 2 años

      Genial. Gracias Danny

  • Shakadabra

    Shakadabra hace 2 años

    vendor\fakerphp\faker\src\Faker\Provider\Image.php

     

    public const BASE_URL = 'https://placehold.jp';  // cambie la URL 

     

    Una vez abierto este archivo buscaremos en las lineas aprox 114 y agregaremos el siguiente codigo, tomemos como referencia el codigo existente 

     

    curl_setopt($ch, CURLOPT_FILE, $fp); //línea existente
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//nueva línea
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//nueva línea
    $success = curl_exec($ch) && curl_getinfo($ch, CURLINFO_HTTP_CODE) === 200;//línea existente

    • Victor Arana Flores hace 2 años

      Esta funcionando con esta solución amigo? Excelente aporte

    • Juan Oyanedel hace 2 años

      Si, lo acabo de probar y funciona perfecto con la solución que indico @Shakadabra

    • Antonio Salcedo hace 2 años

      Aunque en la consola empieza a salir un poco de símbolos raros cada vez que va creando, no sé si eso este bien o mal, pero si me funciono la solución a la perfección, muchas gracias fue de gran ayudar para proseguir, ya que aparte de que lo estoy haciendo el blog en Laravel del lado del frontEnd lo estoy aplicando con React y está algo complejo solucionar dos tipos de cosas jaja pero gracias

    • Andres hace 1 año

      Con este cambio como quedo el archivo yo lo intente pero me da error en las líneas donde coloco el código.

  • Jose Quijado

    Jose Quijado hace 2 años

    Con el método fakes→image() se produce un fallo. Las imágenes se descargan, se graban en el directorio correspondiente, y se borran inmediatamente. Según se graban, se borran al momento. Por lo tanto, al terminar el proceso, el directorio de imágenes queda vacío. Además, al no quedar las imágenes almacenadas, en cada registro de la tabla images, en el campo url, queda el valor posts/, sin más, sin nombre de archivo. Por qué se produce eso? Según he leído en Internet, es un fallo de la clase Faker. He probado todo lo que indicas en tu video en YouTube, pero nada de eso resuelve el problema.

    • Victor Arana Flores hace 2 años

      Así es estimado. La librería faker está fallando. Lo que queda es descargar las imagenes de manera manual.

    • Jose Quijado hace 2 años

      Llevo todo el dia examinando este problema. En la clase Faker hay una comprobación como esta: $success = curl_exec($ch) && curl_getinfo($ch, CURLINFO_HTTP_CODE) == 200; Se pretende que el valor de CURLINFO_HTTP_CODE sea 200, es decir, que la lectura se ha hecho correcta. En lugar de eso es 403 (Forbidden). Es decir, cuando la clase intenta acceder  con cUrl a https://via.placeholder.com el servidor no autoriza el acceso. Así, no sé si realmente es un fallo de la clase Faker, o del servidor donde se generan las imágenes. De un modo u otro, el caso es que no funciona. Si te enteras de una solución alternativa, ponla aquí, por favor.

    • Victor Arana Flores hace 2 años

      El año pasado el creador de faker indico que no daría más mantenimiento a la librería, y lamentablemente no quiso ceder el proyecto para que sea la misma comunidad la que se encargue de mantenerlo. 

      Laravel se encuentra en constante evolución, y por lo que faker se quedará totalmente obsoleta. 

      Por el momento lo que queda es esperar a que salga una nueva tecnología que reemplace a faker, y Laravel decida trabajar con ella, o quien sabe, que Laravel tome  la iniciativa, y cree su propia librería.