簡體   English   中英

雄辯的表和數據透視表在Laravel 4中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM