Miguel Stevens
Miguel Stevens

Reputation: 9191

Getting specific part of data from pivot table in Laravel

I'm doing a website where companies have persons which have scores per event. And the events are ordered by city.

So by example someone can do 4 events, so they get a score for each event.

I'm using a pivot table to save the scores. ( here's a screenshot )

enter image description here

Now i'm loading all persons for a certain event with the following query.

$data['companies'] = Event::find($id)->city->companies;

And i'm showing them using the following structure in my blade file

@foreach($companies as $company)
   {{ $company->name }}
        @foreach($company->persons as $person)
           {{ $person->firstname }}
           {{ $person->eventscore }}
        @endforeach
    @endforeach

The person->eventscore is the link to the pivot table. And it's working but it's giving me the scores of that person for ALL the events.

I only want to see the score for the event that we are watching now ( you can see the id in the url bar, and i marked the id with a red arrow, Now how can i? In my view ask to only show to score for the specific event?

enter image description here

Thank you!

Upvotes: 0

Views: 263

Answers (2)

Diptesh Atha
Diptesh Atha

Reputation: 901

There need to a little change in your query.. See the below example.

class Person extends Eloquent {
    public function events()
    {
        return $this->belongsToMany('Event', 'person_event', 'event_id', 'person_id')->withPivot('id','score');
    }
}

class Event extends Eloquent {
    public function persons()
    {
        return $this->belongsToMany('Person', 'person_event', 'person_id', 'event_id')->withPivot('id','score');
    }
}

Now to loading all persons for a certain event, query is ..

$event_id = 1;
$persons = Person::with('events')->whereHas('events', function($q) use ($event_id){$q->where('event_id',$event_id);})->get();

In view...

@foreach($persons->events as $event)
    {{ $event->pivot->score}}
@endforeach

Upvotes: 1

Sher Afgan
Sher Afgan

Reputation: 1234

You need to specify in your model or more specially in your relation which pivot fields you want.

Here is just an example which you can do

function events(){

return $this->belongsToMany('Events', 'person_events', 'person_id', 'event_id')->withPivot('score');

}

Now you can access this score calling pivot as follows.

@foreach($persons->events as $event)

    {{ $event->pivot->score}}

@endforeach

The above foreach loop is just iterating through all person events and getting the score of that specific event from pivot table.

Upvotes: 0

Related Questions