Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Airlines Laravel Package

ijeffro/laravel-airlines

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Steps

  1. Installation:

    composer require ijeffro/laravel-airlines dev-master
    

    Add to config/app.php:

    'providers' => [
        ijeffro\Airlines\AirlinesServiceProvider::class,
    ],
    'aliases' => [
        'Airlines' => ijeffro\Airlines\AirlinesFacade::class,
    ]
    
  2. Publish Config (Optional):

    php artisan vendor:publish --provider="ijeffro\Airlines\AirlinesServiceProvider"
    
  3. Run Migrations:

    php artisan migrate
    
  4. First Use Case: Fetch an airline by IATA code:

    $airline = Airlines::findByIata('AA'); // American Airlines
    echo $airline->name; // Output: "American Airlines"
    

Implementation Patterns

Core Workflows

  1. Fetching Airlines:

    • By IATA Code:
      Airlines::findByIata('DL'); // Delta Air Lines
      
    • By Name (Partial Match):
      Airlines::findByName('United'); // Returns United Airlines
      
    • All Airlines:
      Airlines::all(); // Collection of all airlines
      
  2. Integration with Eloquent: Add a relationship to an existing model (e.g., Flight):

    public function airline()
    {
        return $this->belongsTo(Airlines::model(), 'airline_iata');
    }
    

    Usage:

    $flight->airline->name; // "Delta Air Lines"
    
  3. Validation: Validate IATA codes in forms:

    use ijeffro\Airlines\Rules\ValidIataCode;
    
    $request->validate([
        'iata_code' => ['required', new ValidIataCode],
    ]);
    
  4. API Responses: Return airline data in JSON:

    return Airlines::findByIata($request->iata)->toArray();
    

Advanced Patterns

  1. Custom Queries: Use the underlying Airlines model directly:

    $activeAirlines = Airlines::model()->where('active', 1)->get();
    
  2. Caching: Cache frequent queries (e.g., all airlines):

    $airlines = Cache::remember('all-airlines', now()->addDays(7), function () {
        return Airlines::all();
    });
    
  3. Localization: Extend the package to support multi-language names:

    // Add a `translations` table and pivot for names in other languages.
    Airlines::model()->withTranslations()->get();
    
  4. Seeding: Seed airlines in a database factory:

    $factory->define(Airlines::model(), function (Faker $faker) {
        return [
            'iata' => $faker->unique()->randomElement(Airlines::all()->pluck('iata')),
            'name' => $faker->randomElement(Airlines::all()->pluck('name')),
        ];
    });
    

Gotchas and Tips

Pitfalls

  1. Laravel 5 Compatibility: The package is explicitly for Laravel 5. Ensure your project is not using Laravel 6+ without adjustments (e.g., service provider binding changes).

  2. Case Sensitivity: IATA codes are case-sensitive in queries. Always use uppercase:

    Airlines::findByIata('aa'); // Returns null (use 'AA' instead)
    
  3. Database Schema: The package assumes a default table name (airlines). If you publish the config and change it, ensure migrations reflect this:

    Schema::create('custom_airline_table', function (Blueprint $table) {
        // ...
    });
    
  4. Duplicate Data: Avoid manually inserting airlines into the database. Use the package’s built-in data or update via:

    php artisan airlines:update
    

Debugging Tips

  1. Check Data Existence: Verify airlines are loaded:

    Airlines::all()->count(); // Should return > 0
    
  2. Log Queries: Enable Laravel’s query logging to debug issues:

    DB::enableQueryLog();
    Airlines::findByIata('AA');
    dd(DB::getQueryLog());
    
  3. Facade vs. Model: Prefer the facade for simplicity, but use the model directly for complex queries:

    // Facade (simpler)
    Airlines::findByIata('AA');
    
    // Model (more control)
    Airlines::model()->where('iata', 'AA')->first();
    

Extension Points

  1. Add Custom Fields: Extend the airlines table to include custom attributes (e.g., hub_airport):

    Schema::table('airlines', function (Blueprint $table) {
        $table->string('hub_airport')->nullable();
    });
    
  2. Override Default Data: Replace the default airline data by extending the service provider:

    public function register()
    {
        $this->app->singleton('airlines', function () {
            return new CustomAirlinesRepository();
        });
    }
    
  3. Add API Endpoints: Create a controller to expose airline data as an API:

    Route::get('/api/airlines', function () {
        return Airlines::all()->map(function ($airline) {
            return [
                'iata' => $airline->iata,
                'name' => $airline->name,
                'active' => $airline->active,
            ];
        });
    });
    
  4. Testing: Mock the facade in tests:

    $this->app->instance('Airlines', Mockery::mock('ijeffro\Airlines\AirlinesInterface'));
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
jayeshmepani/jpl-moshier-ephemeris-php
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui
babelqueue/php-sdk
facebook/capi-param-builder-php
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle