---
title: "Modely a schéma — Teams for Laravel | Roundly"
description: "Šesť tabuliek a modelov, nahradenie modelov vlastnými podtriedami a výmena role providera."
url: https://roundly-consulting.com/sk/open-source/navody/teams-for-laravel/modely-a-schema
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Teams for Laravel](https://roundly-consulting.com/sk/open-source/navody/teams-for-laravel.md)

# Modely a schéma

Šesť tabuliek, šesť modelov. Všetky podporujú soft delete a Team, Member, Invite a JoinRequest pretypujú meta na Collection; mass assignment je otvorený, pretože zapisovať sa má cez fasádu a jej akcie:

| Tabuľka | Model | Hlavné stĺpce |
| --- | --- | --- |
| `teams` | Team | name, is\_public, owner morph (nullable), meta json |
| `team_members` | Member | team\_id, member morph, role, accepted\_invite\_id (pri zmazaní pozvánky null), meta, expires\_at (index) — unikátne (team\_id, member morph), vrátane mäkko zmazaných riadkov |
| `team_invites` | Invite | team\_id, code (unikátny), role, email (index), invited\_by morph, meta, uses, max\_uses, expires\_at |
| `team_join_requests` | JoinRequest | team\_id, requester morph, requested\_role, status (index), message, meta, responded\_by morph, responded\_at, expires\_at |
| `team_roles` | RoleDefinition | key (unikátny), name, permissions json, description — databázový driver rolí |
| `team_role_overrides` | TeamRole | team\_id, key, name, permissions json, description — unikátne (team\_id, key) |

Riadky tabuliek odkazujúcich na teams sa kaskádovo zmažú, keď sa tím zmaže natrvalo (force delete). Morph stĺpce sa riadia podľa key\_type — pozrite Konfigurácia.

## Nahradenie modelu

Nasmerujte kľúč teams.models.\* na vlastnú podtriedu — každá relácia aj akcia načíta triedu z konfigurácie. Trieda musí byť model z balíka alebo jeho podtrieda; čokoľvek iné vyhodí InvalidConfigurationException s názvom kľúča — nikdy sa potichu nenahradí modelom z balíka:

```php
namespace App\Models;

use Illuminate\Database\Eloquent\Relations\HasMany;
use RoundlyConsulting\Teams\Models\Team as BaseTeam;

class Team extends BaseTeam
{
    public function projects(): HasMany
    {
        return $this->hasMany(Project::class);
    }
}
```

```php
// config/teams.php
'models' => [
    'team' => App\Models\Team::class,
    'member' => RoundlyConsulting\Teams\Models\Member::class,
    'invite' => RoundlyConsulting\Teams\Models\Invite::class,
    'team_role' => RoundlyConsulting\Teams\Models\TeamRole::class,
    'join_request' => RoundlyConsulting\Teams\Models\JoinRequest::class,
],
```

## Vlastný role provider

Ak chcete roly načítavať odinakiaľ — napríklad z externej služby — zaregistrujte kontrakt RoleProvider nanovo po registrácii balíka, napríklad v metóde register() vášho AppServiceProvidera. Balík ho registruje ako scoped; urobte to isté, aby sa provider, ktorý si drží mapu rolí, vytvoril nanovo pre každý request a job vo fronte:

```php
// app/Providers/AppServiceProvider.php → register()
use RoundlyConsulting\Teams\Roles\Contracts\RoleProvider;

// Scoped, like the package's own binding: a fresh provider per request or queued job.
$this->app->scoped(RoleProvider::class, fn () => new \App\Teams\MyRoleProvider());
```

```php
namespace RoundlyConsulting\Teams\Roles\Contracts;

interface RoleProvider
{
    /**
     * Define a role — an upsert on $key: registering a key again replaces its
     * name, permissions and description, whichever provider backs it.
     *
     * @param  list<string|Permission>  $permissions
     */
    public function register(string $key, string $name, array $permissions = [], string $description = ''): Role;

    public function find(string $key): ?Role;

    /** @return array<string, Role> */
    public function all(): array;
}
```

## 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](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/teams-for-laravel.md)
