---
title: "Modely a trait vlastníka — Purchases for Laravel | Roundly"
description: "Šesť vymeniteľných Eloquent modelov, trait HasPurchases pre vlastníka, scopy a pomocníky predplatného a databázová schéma."
url: https://roundly-consulting.com/sk/open-source/navody/purchases-for-laravel/modely
language: sk
---

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

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

# Modely a trait vlastníka

Purchase, PurchaseItem, Subscription, SubscriptionItem, PurchaseRefund a PurchaseNotification (v RoundlyConsulting\\Purchases\\Models) sú štandardné Eloquent modely so soft delete a factory.

## Nákupy jedného vlastníka

Purchases::for($owner) nepotrebuje na modeli žiadny trait — obmedzí dopyty presne na morph typ a kľúč daného vlastníka:

```php
use RoundlyConsulting\Purchases\Facades\Purchases;

Purchases::for($user)->subscribedTo('pro');            // bool
Purchases::for($user)->activeSubscription('pro');      // ?Subscription (latest active)
Purchases::for($user)->purchases()->latest()->get();   // Builder<Purchase>
Purchases::for($user)->subscriptions()->count();       // Builder<Subscription>
```

## Trait HasPurchases

Pridajte trait do modelu vlastníka — zvyčajne User — a získate vzťahy purchases a subscriptions cez polymorfný vzťah owner. Jeho pomocníky activeSubscription() a subscribedTo() sú len skratkou pre Purchases::for($this), takže sa správajú presne ako fasáda:

```php
use RoundlyConsulting\Purchases\Concerns\HasPurchases;

class User extends Authenticatable
{
    use HasPurchases;
}

$user->purchases;                    // MorphMany<Purchase>
$user->subscriptions;                // MorphMany<Subscription>
$user->activeSubscription();         // ?Subscription — the latest active one
$user->activeSubscription('pro');    // ?Subscription — by plan name
$user->subscribedTo('pro');          // bool — both delegate to Purchases::for($this)
```

## Scopy a pomocníky predplatného

```php
use RoundlyConsulting\Purchases\Models\Subscription;

Subscription::active()->expiring(7)->get();   // active and ending within 7 days
Subscription::trialing()->get();
Subscription::canceled()->get();

$subscription->isActive();          // entitled and not past ends_at
$subscription->onTrial();
$subscription->daysUntilRenewal();  // ?int
$subscription->isExpiring(7);
$subscription->items;               // HasMany<SubscriptionItem>
```

- active() — stav Completed alebo InGracePeriod a ends\_at prázdne alebo v budúcnosti.
- trialing() — trial\_ends\_at v budúcnosti.
- expiring($days = 7) — ends\_at v priebehu najbližších $days dní.
- canceled() — stav Canceled.
- daysUntilRenewal() — celé dni do ends\_at (nikdy záporné), alebo null bez dátumu konca.

## Scopy poskytovateľa a vzťahy

Purchase, Subscription a PurchaseRefund zdieľajú forProvider(), byProviderId() a byTransaction(); PurchaseRefund pridáva chargebacks() a PurchaseNotification pridáva pending():

```php
use RoundlyConsulting\Purchases\Models\Purchase;
use RoundlyConsulting\Purchases\Models\PurchaseNotification;
use RoundlyConsulting\Purchases\Models\PurchaseRefund;

Purchase::forProvider('stripe')->byProviderId('pi_123')->first();
Purchase::byTransaction('2000000000000001')->first();
PurchaseRefund::forProvider('google')->chargebacks()->get();
PurchaseNotification::forProvider('apple')->pending()->get();

$purchase->owner;     // MorphTo — your User (or null)
$purchase->items;     // HasMany<PurchaseItem>
$purchase->refunds;   // HasMany<PurchaseRefund>
$purchase->meta;      // Collection — the raw store payload
$refund->purchase;    // BelongsTo<Purchase>
```

## Výmena modelov

Každý model sa dá vymeniť cez config('purchases.models.\*'). Vaša trieda musí byť modelom balíka, ktorý nahrádza, alebo z neho dediť — akákoľvek iná trieda vyhodí InvalidConfigurationException s názvom kľúča namiesto toho, aby sa potichu použil model balíka:

```php
// app/Models/Purchase.php
namespace App\Models;

use RoundlyConsulting\Purchases\Models\Purchase as BasePurchase;

class Purchase extends BasePurchase
{
    // your relations, accessors, casts …
}

// config/purchases.php
'models' => [
    'purchase' => \App\Models\Purchase::class,
    // …
],
```

## Schéma

| Tabuľka | Stĺpce |
| --- | --- |
| `purchases` | owner (voliteľný morph), provider, provider\_id, transaction\_id, status, price + price\_currency, meta, last\_event\_at — unikátne (provider, provider\_id) |
| `purchase_items` | purchase\_id (kaskádové mazanie), provider\_id, name, price + price\_currency, quantity |
| `subscriptions` | owner (voliteľný morph), provider, provider\_id, transaction\_id, name, status, price + price\_currency, active\_from, trial\_ends\_at, ends\_at, meta, last\_event\_at — unikátne (provider, provider\_id) |
| `subscription_items` | subscription\_id (kaskádové mazanie), provider\_id, name, price + price\_currency |
| `purchase_refunds` | purchase\_id (voliteľné), provider, provider\_id, transaction\_id, reason, chargeback, price + price\_currency, refunded\_at, meta, last\_event\_at — unikátne (provider, provider\_id) |
| `purchase_notifications` | provider, type, signature\_verified, payload, processed\_at |

Každá tabuľka má timestamps a soft deletes. Názvy tabuliek pochádzajú z getTable() každého modelu, takže vymenený model s vlastným $table sa zmigruje pod týmto názvom — nastavte ho pred spustením migrácií.

## 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/purchases-for-laravel.md)
