Crea una cuenta o inicia sesi贸n

隆Contin煤a aprendiendo sin ning煤n costo! 脷nete y comienza a potenciar tu carrera

隆Se acaba el precio especial! Aprende Ingl茅s, AI, programaci贸n y m谩s.

Antes: $249

Currency
$209
Suscr铆bete

Termina en:

1 D铆as
8 Hrs
51 Min
42 Seg
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 15

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/鈥ost

  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 鈥淗ola Platzi鈥 el slug sera 鈥樷榟ola-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 鈥榚ngine鈥 => null, y c谩mbiala por 鈥榚ngine鈥 => 鈥業nnoDB鈥

php artisan migrate 鈥攕eed

al ejecutar el comando php artisan migrate 鈥攕eed 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 = 鈥楤ASE TABLE鈥)