Solution:
In User model:
public function accounts()
{
return $this->hasMany('Account');
}
In Account model:
public function user()
{
return $this->belongsTo('User');
}
public function accountType()
{
return $this->belongsTo('AccountType', 'accounttype_id', 'id');
}
In AccountType model:
public function accounts()
{
return $this->hasMany('Account', 'accounttype_id', 'id');
}
Then in your Controller:
// This will return a user with all accounts ($user->accounts will be collection)
$user = User::with('accounts')->find(Auth::user()->id);
Or:
$user = User::with('accounts.accountType')->find(Auth::user()->id);
// You may pass the $user as well and then loop the $user->accounts in view
return View::make('accounts.accounts')->with('accounts', $user->accounts);
In your view you may loop to get all accounts like:
@foreach($accounts as $account)
{{ $account->name }}
{{ $account->accountType->name }}
@endforeach
Since $user->accounts is a collection so you may either run a loop or specifically get an account using something like this:
{{ $accounts->first()->name }}; // Get first one's name
{{ $accounts->get(0)->name }}; // Get first one's name
{{ $accounts->get(1)->name }}; // Get second one's name
{{ $accounts->last()->name }}; // Get last one's name
if you pass the $user instead of $accounts like this:
return View::make('accounts.accounts')->with('user', $user);
Then change the loop as well, like this:
@foreach($user->accounts as $account)
{{ $account->name }}
{{ $account->accountType->name }}
@endforeach
You can make sure if that user has accounts in the view before you start the loop, like:
@if($user->accounts->count())
// Loop Here
@endif