2025. március 20., csütörtök

Api feladat megoldása Laravel Eloquent: API Resources használatával

 Amikor API-t kell írnod, előfordulhat, hogy az modellek és a tényleges JSON válaszok között egy átalakító rétegre van szükséged.

Például:

  • Lehet, hogy nem szeretnéd az összes mezőt visszaküldeni az API válaszban.
  • Egyes felhasználók csak bizonyos adatokat láthatnak.
  • Szeretnéd formázni az adatokat (pl. dátumokat szebben megjeleníteni).
  • Szeretnéd hozzáadni a kapcsolódó adatokat az API válaszhoz.

Laravel telepítése és projekt létrehozása

Ha még nincs Laravel telepítve, előbb ezt futtasd:

composer global require laravel/installer

Majd hozz létre egy új Laravel projektet API támogatással:

laravel new real_estat_laravel

válaszd a jetstream v. breeze, api és mysql lehetőségeket

Lépj be a mappába:

cd real_estates_api
de inkább nyisd meg a vsc-ben
 
.env beállítása:
 
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=real_estates
DB_USERNAME=root
DB_PASSWORD=

 

NE futtasd ezeket, ha van kész adatbázisod:

php artisan migrate → újra létrehozná a táblákat (hibára futhat)
php artisan migrate:freshtörli az adatokat is! (NE használd!)

php artisan make:model Apartment

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;

use Illuminate\Database\Eloquent\Model;

class Apartment extends Model{

    use HasFactory;

public $timestamps = false; //ez fontos mert különben a post metódusnál a laravel próbál update dátumokat beszúrni, de olyan oszlop nincs

    protected $table = 'apartments'; // Ha az adatbázisban más a tábla neve

    protected $fillable = [

        'address',

        'city',

        'postal_code',

        'size',

        'rooms',

        'price',

        'owner_name',

        'owner_phone',

        'description',

        'image_url',

        'listed_date'

    ];

}

Controller:

php artisan make:controller ApartmentController

Állítsd be:

namespace App\Http\Controllers;

 

use App\Models\Apartment;

use Illuminate\Http\Request;

 

class ApartmentController extends Controller

{

    public function index()

    {

        return response()->json(Apartment::all());

    }

 

    public function show($id)

    {

        $apartment = Apartment::find($id);

        if (!$apartment) {

            return response()->json(['message' => 'Lakás nem található'], 404);

        }

        return response()->json($apartment);

    }

 

    public function store(Request $request)

    {

        $apartment = Apartment::create($request->all());

        return response()->json(['message' => 'Lakás sikeresen létrehozva', 'data' => $apartment], 201);

    }

 

    public function update(Request $request, $id)

    {

        $apartment = Apartment::find($id);

        if (!$apartment) {

            return response()->json(['message' => 'Lakás nem található'], 404);

        }

        $apartment->update($request->all());

        return response()->json(['message' => 'Lakás sikeresen frissítve', 'data' => $apartment]);

    }

 

    public function destroy($id)

    {

        $apartment = Apartment::find($id);

        if (!$apartment) {

            return response()->json(['message' => 'Lakás nem található'], 404);

        }

        $apartment->delete();

        return response()->json(['message' => 'Lakás sikeresen törölve'], 204);

    }

}

routes/api.php –ben állítsd be: ( ha nincs ilyen fájlod, akkor hozd létre, mert nem követted a telepítés lépéseit)

use App\Http\Controllers\ApartmentController;

Route::apiResource('apartments', ApartmentController::class);

indítsd a szervert:

php artisan serve

Ezen az útvonalon kapsz vissza minden adatot:

http://127.0.0.1:8000/api/apartments

Így id alapon:

http://127.0.0.1:8000/api/apartments/1

post echo apiban:

próbáld beszúrni:

{

           

                        "address": "Rákóczi út 8.",

                        "city": "Litka",

                        "postal_code": "3184",

                        "size": 120,

                        "rooms": 4,

                        "price": "98000000.00",

                        "owner_name": "Rácz Péter",

                        "owner_phone": "+3620123456878",

                        "listed_date": "2025-03-20 07:19:59",

                        "description": "Új építésű családi ház csendes környezetben",

                        "image_url": "https://example.com/lakas3.jpg"

            }



nézd meg milyen id-t kapott írd be a az ulbe és próbáld módosítani



törlés:



Nincsenek megjegyzések:

Megjegyzés küldése

Norvég feladat

A feladathoz szükséges képek, minta és adatbázis elérhetősége: https://github.com/latiza/norv-gfeladat/