A db seeder compared to raw sql

A db seeder compared to raw sql

Usually I find it hard for me to compose raw sql than to write queries using ORM. Here’s a case I did recently.

<?php

use App\Company;
use App\CompanyTerritory;
use App\RegionPostcode;
use Illuminate\Database\Seeder;

class FrNomTerritoriesSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
      $frs = Company::where('type', 'frs')->get();

      foreach($frs as $fr)
      {
         $fr_region_ids = $fr->regions->pluck('id')->all();
         $fr_postcodes = RegionPostcode::query()->whereIn('region_id', $fr_region_ids)->get()->pluck('postcode')->all();

         foreach($fr_postcodes as $pc)
         {
            CompanyTerritory::firstOrCreate([
               'company_id' => $fr->id,
               'territory_type' => CompanyTerritory::TYPE_NOM,
               'postcode' => $pc
            ]);
         }
      }
    }
}
INSERT INTO company_territories (company_id, territory_type, postcode) select companies.id, 'nom', rp.postcode from companies left join company_regions cr on companies.id = cr.company_id left join regions r on cr.region_id = r.id left join region_postcodes rp on r.id = rp.region_id where companies.type='frs';

In my opinion sometimes there’s no good or bad but a preferred way of doing certain things as we can achieve the same result. Though raw sql has better performance in this case as it has much less times of DB query.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.