簡體   English   中英

Laravel雄辯的雄心勃勃加載多個有很多關系

[英]Laravel Eloquent Eager Loading Multiple Has Many Relationship

在我的DB中,模型Class有許多Student ,每個Student有許多Homework ,每個Homework有許多Question 如何編寫一個渴望加載的查詢來獲取與一個特定Class相關的每個Question

我可以使用以下代碼獲得嵌套結構:

$class = Class::find($classId);
$collection = $class->with('students.homeworks.questions')->get();

我怎樣才能得到這個集合中所有問題的數組? 我目前使用toArray()方法獲得的結構是這樣的:

{ //Class
    ...
    students: [
        {
            homeworks: [
                {
                    questions: [{...}]
                },
                ...
            ]
        },
        ...
    ]
}

在這種情況下沒有本機關系。

我創建了一個具有無限級別的HasManyThrough關系: GitHub上的存儲庫

安裝后,您可以像這樣使用它:

class Class extends Model {
    use \Staudenmeir\EloquentHasManyDeep\HasRelationships;

    public function questions() {
        return $this->hasManyDeep(Question::class, [Student::class, Homework::class]);
    }
}

您可以在Student模型中創建一個函數:

public function questions(){
   $questions = [];
   foreach($this->homework as $homework){
        foreach($homework->questions as $question){
           array_push($questions, $question);
        }
   }
   return $questions;
}

這樣,每當您有一個學生對象時,您都可以得到所有類似這樣的問題的數組:

$student->questions

希望這可以對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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