Modelová vrstva - martinbrom/fly-by GitHub Wiki
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-2range- dolet letadla v celých kmspeed- rychlost letadla v km/hcost- 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
getDurationForDistancevrací č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žendescription- popis obrázku
Relace
- Aircraft -
aircrafts()- všechny typy letadel s tímto obrázkem
Užitečné informace
- Metoda
saveFromRequestukládá obrázky do složkystorage/app/public/aircraft-images. Pro správnou funkci je nutné mít složkustorage/app/publicpropojenou se složkoupublic/storage. Toho lze dosáhnout příkazemphp 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ávkyflight_price- cena za lettransport_price- cena za přesun letadla na startovní a zpět z přistávacího letištěduration- doba trvání letucode- unikátní 32 znaků dlouhý kód objednávkyemail- email objednávajícíhouser_note- poznámka objednávajícíhoadmin_note- poznámka majiteleconfirmed_at- datum potvrzení objednávkycompleted_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\OrderCreatedbude 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\OrderConfirmedbude objednávajícímu odeslán potvrzovací email uživateli. Potvrzení objednávky změnou atributuorder_confirmedevent nespustí. - Při odstranění nepotvrzené nebo nedokončené objednávky
App\Events\OrderDeletedbude objednávajícímu odeslán email o zrušení objednávky. Změna atributudeleted_atnebo 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 trasyroute- body trasy ve formátu RouteJsonis_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 nafalse. - Model sám automaticky parsuje hodnoty atributu
is_predefinednabooleana hodnotu atributuroutezJSONnaarray. - 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ě.