Handle data insertion after validation
After a lot of digging, I have finally arrived at (what I think) a better solution. 

Laravel had a feature in 5.0 called CommandBus with 5.1 they have changed the name &amp; the class structure (slightly) to Jobs. 

Jobs are Queuable or you can run them synchronously. The real benefit from using jobs are: 


Loosely coupled to the controller
Easier testing
Re-usable


This was a really good feature for me &amp; my project because an application can be submitted in multiple controllers. 

After implementation my controller now looks like this: 

public function postGuest(Requests\VoucherFormRequest $request)
{
    //return the newly created id
    $company_id     = $this-&gt;dispatchFrom('App\Jobs\CreateCompanyJob', $request);

    //set the application to outstanding
    $outstanding_id = $this-&gt;dispatch(new SetApplicationToOutstandingJob($company_id));

    //return the user_id this application needs mapping to.
    $userId         = $this-&gt;dispatch(new InsertApplicationAnswersJob($request-&gt;only('question'), $company_id));

    //finally map the application to the user chosen by our auto delegation.
    $this-&gt;dispatch(new MapOutstandingAppToUserJob($outstanding_id, $userId));

    return redirect(route('guest-published'));
}


This is the solution that I have found &amp; seems to be a huge improvement on what I had. Most likely, there will be a better solution so feedbacks always welcome!

Handling Questions

Handling questions was done by putting them in a multidimensional array within my form. 

{!! Form::text('question[6]', '', array('class' =&gt; 'app-create-input')) !!}


With this approach all I had to do was iterate through the array &amp; handle each parameter within the loop. 

foreach ($this-&gt;answers as $key =&gt; $value) {
    CompanyAnswers::create([
        'company_id'  =&gt; $this-&gt;company_id,
        'question_id' =&gt; $key,
        'answer'      =&gt; $value
    ]);
}


Normalisation

In regards to my normalisation, I cannot see any glaring issues. Even after further research. However I don't claim to be a DBA so I could very well be missing something.