[英]Eloquent and Pivot Tables in Laravel 4
我有一個投票表,一個Students表以及一個在它們之間的數據透視表,其中包括一個標記和三個投票。
public function students()
{
return $this->belongsToMany('Student', 'polls_students')->withPivot('token','first','second','third');
}
在保存調查結果的過程中,我遇到了一些我不太了解的奇怪行為。 我希望有人可以解釋我所缺少的內容:
$poll = Poll::find(Input::get('poll_id'));
foreach($poll->students()->where('students.id', '=', Input::get('student_id'))->get() as $student){
var_dump($student->pivot->token);
}
$student = $poll->students()->where('students.id', '=', Input::get('student_id'))->get();
var_dump($student->pivot->token);
在上面的代碼中, foreach
循環將成功顯示令牌,第二個令牌將引發異常Undefined property: Illuminate\\Database\\Eloquent\\Collection::$pivot
我想念什么? 這兩個調用不是在邏輯上創建相同的對象嗎? “樞軸”如何在第一個而不是后者上起作用?
$poll = Poll::find(Input::get('poll_id'));
foreach($poll->students()->where('students.id', '=', Input::get('student_id'))->get() as $student){
var_dump($student->pivot->token);
}
在這里$poll->students()
檢索一個集合,由於foreach
循環,您在$student
變量中只有一個對象,可以使用$student->pivot->token
$student = $poll->students()->where('students.id', '=', Input::get('student_id'))->get();
var_dump($student->pivot->token);
在這里,你正在做同樣的事情,使用$poll->students()
你得到一個集合,但你不使用一個循環,並嘗試使用做同樣的事情,這個時候$student->pivot->token
,但它不工作,因為你如果嘗試這樣的操作,則未定義要從中獲取數據pivot->token
任何索引
$student->first()->pivot->token
或者可能
$student->get(1)->pivot->token
或者也許您可以像這樣使用first()
代替get()
$student = $poll->students()->where('students.id', '=', Input::get('student_id'))->first();
那你可以用
$student->pivot->token
請記住,即使只有一個記錄/模型, get()
也會返回一個集合。
$poll = Poll::find(Input::get('poll_id'));
foreach($poll->students as $student){
var_dump($student->pivot->where('student_id',$student->id)->where('poll_id',$poll->id)->first()->token);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.