NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Appointments for Laravel

Schéma a vlastné modely

Balík používa dve tabuľky. Ich názvy určuje table_names; názvy stĺpcov sú pevné.

appointments

StĺpecTypPoznámka
idbigintAutoinkrementálny primárny kľúč.
uuiduuid, uniqueNáhodná identita vyplnená pri vložení — nie je to kľúč. Z nej sa skladá UID v ICS.
namestringNázov termínu.
descriptiontext, nullableVoľný popis.
statusstring, predvolene pendingCastuje sa na enum Status.
metajsonb, nullableCastuje sa na Collection.
timezonestring, nullablePásmo, v ktorom bol termín rezervovaný; určuje lokálne zobrazenie.
locationstring, nullableNázov miesta konania.
latitude / longitudedecimal(10,7), nullableSúradnice miesta; spoločný index, dostupné ako coordinates.
starts_attimestampVždy v UTC, nech je app.timezone akékoľvek. Indexovaný samostatne aj spolu s ends_at.
ends_attimestamp, nullableVždy v UTC. Ak chýba, odvodí sa z trvania.
duration_minutesunsigned integer, nullableAk chýba, doplní sa z ends_at.
recurrence_groupuuid, nullableSpoločný pre všetky výskyty série; indexovaný.
created_at / updated_at / deleted_attimestampsSoft deletes.

appointment_participants

StĺpecTypPoznámka
idbigintAutoinkrementálny primárny kľúč.
appointment_idforeignIdTermín; obyčajný stĺpec bez obmedzenia na úrovni databázy.
participant_type / participant_idmorphsZúčastnený model; typ participant_id určuje key_type.
rolestring, nullableCastuje sa na enum ParticipantRole.
metajsonb, nullableCastuje sa na Collection.
created_at / updated_at / deleted_attimestampsSoft deletes. Unikátny index na (appointment_id, participant_type, participant_id).

Každý model sa môže termínu zúčastniť len raz — unikátny index pokrýva (appointment_id, participant_type, participant_id). Riadky účastníkov zmazané cez soft delete v tomto indexe zostávajú, preto opätovné pridanie odobraného účastníka obnoví jeho starý riadok s novou rolou a meta údajmi (ParticipantUpdated) namiesto vloženia druhého.

Typ kľúča účastníkov

key_type určuje typ polymorfného stĺpca participant_id: bigint pre predvolené autoinkrementálne kľúče Laravelu, uuid pre modely s HasUuids, ulid pre modely s HasUlids. Na veľkosti písmen nezáleží; iná hodnota pri spustení migrácií vyhodí InvalidConfigurationException, takže preklep nikdy nevytvorí nesprávny stĺpec. Všetky modely, ktoré pripájate ako účastníkov, musia mať rovnaký typ kľúča; vlastné tabuľky balíka majú vždy autoinkrementálne id. Nastavte ho pred publikovaním a spustením migrácií:

APPOINTMENTS_KEY_TYPE=uuid
use Illuminate\Database\Eloquent\Concerns\HasUuids;
use Illuminate\Foundation\Auth\User as Authenticatable;
use RoundlyConsulting\Appointments\Concerns\HasAppointments;

class User extends Authenticatable
{
    use HasAppointments;
    use HasUuids; // pairs with APPOINTMENTS_KEY_TYPE=uuid
}

Vlastné modely

Nasmerujte appointments.model a appointments.participant na vlastné podtriedy, ak potrebujete ďalšie vzťahy, accessory či scopes. Rozšírte modely z balíka — zámerne nie sú final a prinášajú traity pre miesto konania, kontakty, hodnotenia a schvaľovanie:

namespace App\Models;

use RoundlyConsulting\Appointments\Models\Appointment;
use RoundlyConsulting\Appointments\Models\Participant;

class Booking extends Appointment
{
    // Reads its table from appointments.table_names.appointments — nothing to set.

    public function isToday(): bool
    {
        return $this->startsAtLocal()->isToday();
    }
}

class BookingParticipant extends Participant
{
    // Reads its table from appointments.table_names.participants — nothing to set.
}
// config/appointments.php
'model' => App\Models\Booking::class,
'participant' => App\Models\BookingParticipant::class,
  • Oba modely si tabuľku čítajú z table_names — Appointment z table_names.appointments, Participant z table_names.participants — takže podtrieda s iným názvom triedy $table nepotrebuje.
  • Nenastavený kľúč (chýbajúci, null alebo prázdny) použije model z balíka. Čokoľvek iné musí byť model z balíka alebo jeho podtrieda — trieda, ktorá ho nerozširuje, vyhodí InvalidConfigurationException s názvom kľúča, namiesto aby sa potichu nahradila.
  • Vzťah participants pomenúva cudzí kľúč (appointment_id) explicitne, takže nahradený model nikdy nehľadá stĺpec odvodený od názvu svojej triedy.
  • Akcie, trait HasAppointments, kontroly dostupnosti aj vzťah účastníka načítajú model z konfigurácie, takže vytvárajú a vracajú práve vašu podtriedu.

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.