Reputation: 9191
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 )
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
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?
Thank you!
Upvotes: 0
Views: 263
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
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