Laravel - Create CRUD API Service
[1] Open the Laravel Project
Continue from the previous tutorial https://hashnotes.hashnode.dev/laravel-create-user-profile-update-api
[2] Migrate new table
[2.1] Create migration file
Run artisan command:
php artisan make:migration create_reports_table --create=reports
[2.2] Edit migration file
([file:app/database/migration/xxxx_xx_xx_xxxx..](file://app/database/migration/xxxx_xx_xx_xx..)
Edit function up()
to define new fields:
public function up(): void
{
Schema::create('reports', function (Blueprint $table) {
$table->id();
$table->string("repref", 100);
$table->string("repdate", 8);
$table->string("reptime", 8);
$table->string("replocn", 100);
$table->string("replocndesc", 100);
$table->text("reppict1");
$table->text("reppict1thum");
$table->text("reppict2");
$table->text("reppict2thum");
$table->text("reppict3");
$table->text("reppict3thum");
$table->enum("repfire", ['y', 'n'])->default('n');
$table->enum("reptrap", ['y', 'n'])->default('n');
$table->enum("repinju", ['y', 'n'])->default('n');
$table->integer("user_id");
$table->timestamps();
});
}
[2.3] Run migration
Warning: Before running the migration, for windows console developers, you have to edit database path according to the windows path style in the env file e.g. DB_DATABASE=database/rear.sqlite
.
Run migration.
php artisan migrate
[3] Define Model
[3.1] Create Model
Run artisan command:
php artisan make:model Report
[3.2] Edit Model
([file:app/Models/Report.php](file:app/Models..)
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Report extends Model
{
use HasFactory;
protected $fillable = [
'repref',
'repdate',
'reptime',
'replocn',
'replocndesc',
'reppict1',
'reppict1thum',
'reppict2',
'reppict2thum',
'reppict3',
'reppict3thum',
'repfire',
'reptrap',
'repinju',
'user_id',
];
}
[4] Define the Controller
The controller will handle CRUD activities.
[4.1] Create Controller
Therefore add the parameter --resource
to the artisan command:
php artisan make:controller Api/ReportController --resource
[4.2] Edit Controller
(file: app\Http\Controllers\Api\ReportController.php)
store(Request $request):
public function store(Request $request)
{
$report = new Report;
$report->repref = $request->repref;
$report->repdate = $request->repdate;
$report->reptime = $request->reptime;
$report->replocn = $request->replocn;
$report->replocndesc = $request->replocndesc;
$report->reppict1 = Image::make($request->reppict1)->fit(1000)->encode ('data-url');
$report->reppict1thum = Image::make($request->reppict1)->fit(100)->encode ('data-url');
$report->reppict2 = Image::make($request->reppict2)->fit(1000)->encode ('data-url');
$report->reppict2thum = Image::make($request->reppict2)->fit(100)->encode ('data-url');
$report->reppict3 = Image::make($request->reppict3)->fit(1000)->encode ('data-url');
$report->reppict3thum = Image::make($request->reppict3)->fit(100)->encode ('data-url');
$report->repfire = $request->repfire;
$report->reptrap = $request->reptrap;
$report->repinju = $request->repinju;
$report->user_id = $request->user_id;
$report->save();
return response()->json([
'stus' => 'stored',
],200);
}
update(Request $request, string $id):
public function update(Request $request, string $id)
{
$report = Report::find($id);
$report_data = [
'repref' => $request->repref,
'repdate' => $request->repdate,
'reptime' => $request->reptime,
'replocn' => $request->replocn,
'replocndesc' => $request->replocndesc,
'repfire' => $request->repfire,
'reptrap' => $request->reptrap,
'repinju' => $request->repinju,
'user_id' => $request->user_id
];
$report_data['reppict1'] = $request->reppict1;
$report_data['reppict1thum'] = $request->reppict1;
$report_data['reppict2'] = $request->reppict2;
$report_data['reppict2thum'] = $request->reppict2;
$report_data['reppict3'] = $request->reppict3;
$report_data['reppict3thum'] = $request->reppict3;
$report->update($report_data);
return response()->json([
'stus' => 'updated',
],200);
}
selectbyuserlatest(string $id):
public function selectbyuserlatest(string $id)
{
//$report = Report::where("user_id",$request->user_id)->first(); //get first item example
//$report = Report::where("user_id",$request->user_id)->latest()->first(); //get last item example
$report=Report::select('repref', 'repdate','reptime','replocn','replocndesc',
'reppict1thum','reppict2thum','reppict3thum','repfire','reptrap','repinju','user_id')
->where('user_id',$id)->latest()->first();
return response()->json([
'report'=> $report,
'stus' => 'edit',
],200);
}
[5] Update API Routes
(file: routes\api.php )
use App\Http\Controllers\Api\ReportController;
Route::middleware('auth:sanctum')->post('/report',[ReportController::class, 'store']);
Route::middleware('auth:sanctum')->post('/report/user/{id}/last',
[ReportController::class, 'selectbyuserlatest']);