php - Eloquent and Pivot Tables in Laravel 4 -
i have poll table, students table, , pivot table between them includes token , 3 votes.
public function students() { return $this->belongstomany('student', 'polls_students')->withpivot('token','first','second','third'); }
while working out saving poll results, came across odd behavior don't quite understand. i'm hoping can explain i'm missing:
$poll = poll::find(input::get('poll_id')); foreach($poll->students()->where('students.id', '=', input::get('student_id'))->get() $student){ var_dump($student->pivot->token); } $student = $poll->students()->where('students.id', '=', input::get('student_id'))->get(); var_dump($student->pivot->token);
in above code, foreach
loop display token, second 1 throws exception undefined property: illuminate\database\eloquent\collection::$pivot
what missing? these 2 calls not logically creating same object? how 'pivot' working on first , not latter?
you first example:
$poll = poll::find(input::get('poll_id')); foreach($poll->students()->where('students.id', '=', input::get('student_id'))->get() $student){ var_dump($student->pivot->token); }
here $poll->students()
retrieves collection , because of foreach
loop single object in $student
variable , can use $student->pivot->token
you second example:
$student = $poll->students()->where('students.id', '=', input::get('student_id'))->get(); var_dump($student->pivot->token);
here doing same thing, using $poll->students()
getting collection time not using loop , trying same thing using $student->pivot->token
it's not working because didn't define index want pivot->token
, if try this
$student->first()->pivot->token
or maybe
$student->get(1)->pivot->token
or maybe can use first()
instead of get()
this
$student = $poll->students()->where('students.id', '=', input::get('student_id'))->first();
then can use
$student->pivot->token
remember that, get()
returns collection if there 1 record/model.
Comments
Post a Comment