Ein erster Entwurf für eine Datenbank zur Arbeitszeiterfassung.
Links: https://carbon.nesbot.com/docs/#api-addsub
Migration
<?php
// create_time_registration_table.php
use App\Models\User;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('time_registrations', function (Blueprint $table) {
$table->id();
$table->foreignIdFor(User::class);
$table->dateTime('start_time')->default(now());
$table->dateTime('end_time')->nullable();
$table->string('hours')->virtualAs('TIMEDIFF(end_time,start_time)');
$table->string('description')->nullable();
$table->timestamps();
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('time_registrations');
}
};
Factory
<?php
// TimeRegistrationFactory.php
namespace Database\Factories;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\TimeRegistration>
*/
class TimeRegistrationFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
// https://carbon.nesbot.com/docs/#api-addsub
$days = rand(0, 10);
$sTime = rand(390, 540);
$eTime = $sTime + rand(15, 540);
$startTime = Carbon::today()->subDays($days)->addMinutes($sTime);
$endTime = Carbon::today()->subDays($days)->addMinutes($eTime);
return [
// Between now and 180 days ago with random time
'start_time' => $startTime,
'end_time' => $endTime,
'user_id' => User::factory()->withPersonalTeam()->create(),
//'end_time' => date('H:i:s', rand(1, 54000)), // 00:00:00 - 15:00:00,
];
}
}
DatabaseSeeder.php
// DatabaseSeeder.php
public function run(): void
{
$users = User::factory(10)->withPersonalTeam()->create();
User::factory()->withPersonalTeam()->create([
'name' => 'Admin',
'email' => 'admin@example.com',
]);
$TimeRegistration = TimeRegistration::factory(100)
->recycle($users)
->create();
}
Schreibe einen Kommentar