Skip to content

Modelová vrstva

Martin Brom edited this page May 4, 2018 · 10 revisions

Modelová vrstva

Navigace


Užitečné informace

Každý model od základu v Laravelu dědí funkčnost od Illuminate\Database\Eloquent\Model. V aplikaci se však mezi Laravel modelem a modelovou vrstvou nachází ještě abstraktní třída App\BaseModel. Tato třída umožnuje všem modelům využívat validaci pomocí Watson\Validating\ValidatingTrait a získat modely vytvořené za posledních X hodin pomocí query scope scopeNew(). Interval v hodinách pro výběr nových modelů je uložen v konstantě NEW_INTERVAL.


Aircraft

Obecný popis

Model představuje typ letadla v aplikaci, nikoliv jednotlivá letadla na letišti.

Atributy

  • name - název letadla, např. Antonov An-2
  • range - dolet letadla v celých km
  • speed - rychlost letadla v km/h
  • cost - cena na provoz letadla v Kč na km

Relace

  • AircraftAirport - všechna letadla tohoto typu, nevyužívá se
  • Airport - airports() - všechna letiště, na kterých se tento typ letadla nachází
  • AircraftImage - image() - letadlu přislušící obrázek

Užitečné informace

  • Model využívá SoftDeletes.
  • Metoda getDurationForDistance vrací čas v sekundách.

AircraftAirport

Obecný popis

Model představuje instanci určitého typu letadla na určitém letišti. Neobsahuje žádné další podstatné atributy kromě obou cizích klíčů.

Atributy

Neobsahuje

Relace

  • Aircraft - aircraft() - příslušné letadlo
  • Airport - airport() - příslušné letiště
  • Order - orders() - všechny objednávky pro toto letadlo

Užitečné informace

  • Model využívá SoftDeletes.
  • Tabulka v databázi má nestandartní název: aircraft_airport_xref.

AircraftImage

Obecný popis

Model představuje obrázek typu letadla.

Atributy

  • path - unikátní cesta, kde je obrázek uložen
  • description - popis obrázku

Relace

  • Aircraft - aircrafts() - všechny typy letadel s tímto obrázkem

Užitečné informace

  • Metoda saveFromRequest ukládá obrázky do složky storage/app/public/aircraft-images. Pro správnou funkci je nutné mít složku storage/app/public propojenou se složkou public/storage. Toho lze dosáhnout příkazem php artisan storage:link.

Airport

Obecný popis

Model představuje instanci letiště.

Atributy

  • name - název letiště
  • lat - zeměpisná šířka letiště
  • lon - zeměpisná délka letiště
  • code - ICAO kód letiště

Relace

  • Aircraft - aircrafts() - všechny typy letadel, které se na tomto letišti nacházejí
  • AircraftAirport - všechna letadla na tomto letišti, nevyužívá se
  • Route - všechny trasy startující z tohoto letiště, nevyužívá se
  • Route - všechny trasy končící na tomto letišti, nevyužívá se

Užitečné informace

  • Validace souřadnic využívá stejný regex jako validační pravidlo RouteJson.
  • Model využívá SoftDeletes.

Order

Obecný popis

Model představuje instanci objednávky.

Atributy

  • price - celková cena objednávky
  • flight_price - cena za let
  • transport_price - cena za přesun letadla na startovní a zpět z přistávacího letiště
  • duration - doba trvání letu
  • code - unikátní 32 znaků dlouhý kód objednávky
  • email - email objednávajícího
  • user_note - poznámka objednávajícího
  • admin_note - poznámka majitele
  • confirmed_at - datum potvrzení objednávky
  • completed_at - datum dokončení objednávky (let proběhl)

Relace

  • AircraftAirport - aircraftAirport() - příslušné letadlo
  • Route - route() - trasa letu

Užitečné informace

  • Model využívá SoftDeletes.
  • V případě pokusu o označení nepotvrzené objednávky za dokončenou bude akce zamítnuta.
  • Při vytvoření objednávky App\Events\OrderCreated bude jak objednávajícímu, tak všem majitelům odeslán email o vytvoření nové objednávky.
  • Při potvrzení objednávky App\Events\OrderConfirmed bude objednávajícímu odeslán potvrzovací email uživateli. Potvrzení objednávky změnou atributu order_confirmed event nespustí.
  • Při odstranění nepotvrzené nebo nedokončené objednávky App\Events\OrderDeleted bude objednávajícímu odeslán email o zrušení objednávky. Změna atributu deleted_at nebo odstranění dokončené objednávky event nespustí.

Route

Obecný popis

Model představuje instanci obsahující informace o naplánované trase.

Atributy

  • distance - délka trasy
  • route - body trasy ve formátu RouteJson
  • is_predefined - boolean, zda-li se jedná o předdefinovanou trasu

Relace

  • Airport - airportFrom() - startovní letiště
  • Airport - airportTo() - přistávací letiště
  • Order - orders() - všechny objednávky na této trase

Užitečné informace

  • Pokud vytvářený model neobsahuje v parametrech použitých v konstruktoru položku is_predefined, je tento argument automaticky nastaven na false.
  • Model sám automaticky parsuje hodnoty atributu is_predefined na boolean a hodnotu atributu route z JSON na array.
  • Délka trasy je vždy přepočítána při ukládání modelu: Route::saving. Celková délka je vypočítána jako délka trasy sečtená se vzdálenosti ze startovního letiště do prvního bodu trasy a z posledního bodu trasy na přistávací letiště.

Clone this wiki locally