Question: I am using the following code to insert the records One by One.

```
foreach($data["SportsTypes"] as $SportsTypeID) {
    $userSportsType = new \App\Models\User\UserSportsTypeModel();
    $userSportsType->UserID       = 1;
    $userSportsType->SportsTypeID = $SportsTypeID;
    $userSportsType->save();
}

```

Can I do bulk insert so as to get rid of saving process in iteration?

Answer: 
Unfortunately I did not get an answer to my comment. This answer assumes the problem is that normal default routes are used instead of routes with subdomain.

Example:

A user is visiting sub.website.com but route() returns website.com/blabla instead of sub.website.com/blabla

You can solve this by dynamically create the pattern for domain inside routes.php

```
// routes.php
$url_parameters = @explode(".", $_SERVER['HTTP_HOST']);

if (count($url_parameters) == 3)
{
    $pattern = '{subdomain}.{domain}.{tld}';
}
else
{
    $pattern = '{domain}.{tld}';
}

Route::group(['domain' => $pattern], function () {

    Route::get('/', [
        'as' => 'get_index',
        'uses' => 'HomeController@getIndex'
    ]);

}

```

By using this method you will create a problem with your route() and controller parameters.

**route() problem**

When calling the route() function while using this method you will get a missing argument error. The route() function expects you to give the {subdomain}.{domain}.{tld} parameters.

You can solve this by creating your own route function. I named it mdroute() (multi domain route).

```
function mdroute($route, $parameters = [])
{

    $data = [
        'domain' => \Request::route()->domain,
        'tld' => \Request::route()->tld
    ];

    $subdomain = \Request::route()->subdomain;

    if ($subdomain) $data['subdomain'] = $subdomain;

    // You can use mdroute('blabla', 'parameter')
    // or mdroute('blabla', ['par1' => 'parameter1', 'par2' => 'parameter2'])
    //
    if (is_array($parameters))
    {
        $data = array_merge($data, $parameters);
    }
    else
    {
        $data[] = $parameters;
    }

    return route($route, $data);

}

```

**Controller problem**

The parameters {sub}.{domain}.{tld} are always send to your controller. You can't access other parameters the way you are used to be.

Example:

```
// Domain = sub.webite.com

// Your route
//
Route::get('/post/{id}/{param2}', [
    'uses' => 'PostController@getIndex'
]);

// PostController
//
public function getIndex($id, $param2)
{

    // $id will be 'sub'
    // $param2 will be 'website'

}

```

You can solve this by accessing your parameter through the Request object.

```
public function getIndex(Request $request)
{

    $id = $request->id;

    $param2 = $reqeust->param2;

}

```
This has been answered, at least partially, by myself here: [Creating a route in Laravel using subdomain and domain wildcards](https://stackoverflow.com/questions/37286892/creating-a-route-in-laravel-using-subdomain-and-domain-wildcards/37288632#37288632)

In short, you cannot make the whole domain a parameter in the routes file. Instead, you assign a middleware that will check the current domain, match it against your pre-defined list of allowed user domains and based on that - take some decision (eg. what method to hit in your controller).

Consider:

```
Route::group([
    'middleware' => 'domain-check',
], function () {
    Route::get('/', 'FrontendController@handle');
});

```

And then in your FrontendController:

```
public function handle(Request $request)
{
    // Information about the current user/domain is here
    $request->client;

    // An example - let's imagine that client object contains a view ID
    return response()->view($request->client->view);
}

```