Crea una cuenta o inicia sesión

¡Continúa aprendiendo sin ningún costo! Únete y comienza a potenciar tu carrera

Curso de API REST con Laravel

Curso de API REST con Laravel

Profesor Italo Morales F

Profesor Italo Morales F

Sitio web: estructura inicial

3/18
Recursos

Aportes 22

Preguntas 14

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Les comparto el paso a paso:
Crear proyecto

laravel new api-8

Entrar a la carpeta y crear Model-Controller-Migration-Factory

cd api-8
php artisan make:model Post -cmf

migrations/…post

  public function up()
  {
    Schema::create('posts', function (Blueprint $table) {
      $table->id();

      $table->unsignedBigInteger('user_id');
      $table->string('title');
      $table->string('slug')->unique();
      $table->text('content');

      $table->timestamps();

      $table->foreign('user_id')->references('id')->on('users');
    });
  }

PostFactory.php

  public function definition()
  {
    return [
      'user_id' => rand(1,10),
      'title' => $this->faker->sentence,
      'slug' => $this->faker->slug,
      'content' => $this->faker->text(1600)
    ];
  }

DatabaseSeeder.php

  public function run()
  {
    \App\Models\User::factory(10)->create();
    \App\Models\Post::factory(120)->create();
  }

Comando de migración:

php artisan migrate --seed

Para crear mediante composer

composer create-project laravel/laravel API

Una pequeña sugerencia a la hora de crear llaves foraneas es la de utilizar el atributo de foreignId de esta forma te ahorras el tiempo de escribir unsignedBigInteger, permitiendo que tu código sea más rápido y legible de entender de esta forma 😄 :

$table->foreignId('user_id');

Esto es genial e importante, porque efectivamente estamos muy acostumbrados a siempre trabajar las rutas de Laravel directo en el archivo web.php, ¿pero no te has preguntado para qué son los otros archivos? 👀 Es ahora cuando empezaos a trabajar con api.php

Hola, les comparto una forma de crear los factory y que el slug realmente sea el slug del post, o sea… Si el titulo del post es “Hola Platzi” el slug sera ‘‘hola-platzi’’

En donde creamos el factory de Post primero declaramos:

use Illuminate\Support\Str;
use App\Models\User;

Despues donde creamos el factory:

public function definition()
    {
        //Definimos una frase falsa para el titulo
        $title = $this->faker->sentence;
        //Con Str llamamos al metodo slug y le pasamos el titulo
        $slug = Str::slug($title);
        //Creamos el factory
        return [
            //De esta forma obtenemos un usuario aleatorio y colocamos el ID (asi no dependemos de que los ids obligatoriamente sean del 1 al 10)
            'user_id' => User::all()->random()->id,
            'title' => $title,
            'slug' => $slug,
            'content' => $this->faker->text(1600),
        ];
    }

¿Soy el único que ve que el video se va trabando?

yo lo hago asi, importo la clase

use App\Http\Controllers\PostController;

Luego si lo importo de esta manera

Route::get('/', PostController::class, 'index')->name('index')

se me hace a mi mas corto

Para definir relaciones en la migración tambien pueden usar esta forma que ocupa una sola línea:

$table->foreignId('user_id')->constrained();

Eso reemplaza a:

    $table->unsignedBigInteger('user_id');
 
    $table->foreign('user_id')->references('id')->on('users');

Prefiero trabajar así

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Post;
class PostController extends Controller
{

    public function index(){
        $post =Post::latest()->paginate();
        return view('index', compact('post'));
    }
}

👋Hola a todos, les comparto una forma para revisar si su conexión con la base de datos fue exitosa usando Laravel tinker.

Primero debemos abrir nuestra consola de visual studio code e iniciamos tecleando el comando:

php artisan tinker

El siguiente paso es acceder a la instancia PDO con el siguiente comando, el cual nos devolver un objeto de PDO con la información de la conexión si todo fue exitoso, de lo contrario nos regresará un error.

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

Ejemplo de éxito de conexión.

Ejemplo de un error de conexión con la base de datos

Una vez conozcas el estado de tu conexión puede simplemente despedirte de Laravel Tinker tecleando el comando:

exit

Si deseas consultar más información al respecto puedes revisar la documentación de Laravel Conexiones a bases de datos o sobre Tinker la consola interactiva 😊.

Si te fue de utilidad este información déjamelo saber en los comentarios, y si gustas agregar o aportar un dato extra seria genial. 🤗 Saludos a todos.

existe algo para crear diferentes ambientes de laravel? algo asi como conda?

Alguien sabe porque no me esta funcionando lo de los seeder tengo todo igual a la clase me da este error: BadMethodCallException Call to undefined method App\User::factory() at C:\laragon\www\api\vendor\laravel\framework\src\Illuminate\Support\Traits\ForwardsCalls.php:50 46| \* @throws \BadMethodCallException 47| \*/ 48| protected static function throwBadMethodCallException($method) 49| { \> 50| throw new BadMethodCallException(sprintf( 51| 'Call to undefined method %s::%s()', static::class, $method 52| )); 53| } 54| } • Bad Method Call: Did you mean App\User::toArray() ? 1 C:\laragon\www\api\vendor\laravel\framework\src\Illuminate\Support\Traits\ForwardsCalls.php:36 Illuminate\Database\Eloquent\Model::throwBadMethodCallException("factory") 2 C:\laragon\www\api\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php:1736 Illuminate\Database\Eloquent\Model::forwardCallTo(Object(Illuminate\Database\Eloquent\Builder), "factory")

Para cambiar de MyISAM a InnoDB en Laravel, puedes seguir los siguientes pasos:

Abre el archivo config/database.php.
Busca la línea ‘engine’ => null, y cámbiala por ‘engine’ => ‘InnoDB’

php artisan migrate —seed

al ejecutar el comando php artisan migrate —seed si muestra essores como por ejemplo:

SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes (SQL: alter table users add unique users_email_unique(email))

Lo que debes hacer es lo siguiente Vamos a la ubicacion: app/Providers/AppServiceProvider.php

namespace App\Providers;

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

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

}

Para abrir el editor en la ubicación de la terminal pueden usar:

code ./ -r

Espero a alguien le sirva…

web

En el archivo PostFactory.php pueden definir el user_id con un dato aleatorio del modelo users en lugar de hacer rand(1,10).

- 'user_id' => rand(1,10),
+ 'user_id' => \App\Models\User::inRandomOrder()->first()->id,

En vez de utilizar unsignedBigInteger, yo uso directamente foreignId. Esto te ahorra ese primer paso y creas tu llave foranea de una vez.

Para los que tienen dificultades al acceder a la conexión de BD local, yo lo pude realizar correctamente usando XAMPP

Utilizar un IDE como PHPStorm permite recibir ayuda sobre los métodos posibles a utilizar en los diferentes contextos, por ejemplo cuando llamamos a Faker. Así será más sencillo conocer los métodos disponibles y no usar únicamente los que tiene el docente.

yo hubiera utilizado $ php artisan make:controller PostController -rmf para que me escribiera todos los metodos la API para el controlador de posts.

me quede en migration

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