mikelovelyuk
mikelovelyuk

Reputation: 4152

Laravel Eloquent Relationship Confusion

Here is my situation;

As I am using Laravel, here is my Controller method to view all agreements for a specific client;

public function index($client_id)
{
    $client_agreements = Agreement::find($client_id);

    return View::make('client_agreements.index')
        ->with('client_agreements', $client_agreements);
}

Here is my Agreement Model;

class Agreement extends Eloquent {

    protected $table = 'agreements';

    public function client_agreements(){

        return $this->hasMany('ClientAgreement', 'agreement_id');
    }

}

So I want to output in the view from the agreements table;

and from the client_agreements table;

My View code (which I'm sure is wrong but don't know why) is essentially;

@foreach($client_agreements as $client_agreement)
    <tr>
        <td>{{ $client_agreement->agreement_type }}</td>
        <td>{{ $client_agreement->level }}</td>
        <td>{{ $client_agreement->start_date }}</td>
        <td>{{ $client_agreement->expire_date }}</td>
    </tr>
@endforeach

What am I doing wrong?

Upvotes: 1

Views: 148

Answers (1)

lukasgeiter
lukasgeiter

Reputation: 152890

You can do it like this:

$client = Client::with('agreements')->find($client_id);
$client_agreements = $client->agreements;
return View::make('client_agreements.index')
           ->with('client_agreements', $client_agreements);

And in your view:

@foreach($client_agreements as $client_agreement)
    <tr>
        <td>{{ $client_agreement->agreement_type }}</td>
        <td>{{ $client_agreement->level }}</td>
        <td>{{ $client_agreement->pivot->start_date }}</td>
        <td>{{ $client_agreement->pivot->expire_date }}</td>
    </tr>
@endforeach

This would require the following setup:

Client model

class Client extends Eloquent {

    public function agreements(){
        return $this->belongsToMany('Agreement', 'client_agreements')->withPivot('id', 'start_date', 'expire_date');
    }
}

Agreement model

class Agreement extends Eloquent {

    public function clients(){
        return $this->belongsToMany('Client', 'client_agreements')->withPivot('id', 'start_date', 'expire_date');
    }
}

For more information read the Eloquent docs (especially the section about relationships)

Upvotes: 2

Related Questions