Laravel นับความสัมพันธ์ของความสัมพันธ์ [ซ้ำกัน]

ฉันกำลังพยายามนับจำนวนแถวในความสัมพันธ์ซึ่งเป็นความสัมพันธ์ผ่านตารางหลัก มีทั้งหมด 3 โต๊ะครับ..

แบบสำรวจ:

| id |

คำถาม:

| id | survey_id |

คำตอบ:

| id | question_id |

ฉันกำลังพยายามหาจำนวนรวมในตารางคำตอบจากตารางแบบสำรวจ ฉันตั้งค่าความสัมพันธ์ทั้งหมดแล้ว แต่ดูเหมือนจะไม่สามารถนับจำนวนทั้งหมดได้

ฉันได้ลองทำ ->withCount('questions.responses') แล้ว แต่ส่งผลให้เกิดข้อผิดพลาด 500 ฉันรู้ว่าฉันสามารถวนซ้ำได้ แต่ไม่รู้ว่ามีวิธีที่มีประสิทธิภาพกว่านี้ใน Eloquent หรือไม่


person Community    schedule 05.03.2019    source แหล่งที่มา
comment
คุณมีความสัมพันธ์ HasManyThrough ที่กำหนดไว้หรือไม่?   -  person Piazzi    schedule 05.03.2019
comment
ไม่ได้คิดเกี่ยวกับเรื่องนี้ คุณสามารถเพิ่มคำตอบเพื่อให้ฉันสามารถยอมรับได้   -  person    schedule 05.03.2019


คำตอบ (1)


คุณสามารถบรรลุเป้าหมายได้โดยใช้ความสัมพันธ์ Has Many Through

ในโมเดลของคุณ:

/* Survey.php */

public function responses()
{
    return $this->hasManyThrough(Response::class, Question::class);
}

จากนั้นในตัวควบคุมของคุณ:

/* SurveyController.php */

public function index()
{
    // Get your surveys with your desired attribute:
    $surveys = Survey::withCount('responses')->get();

    return view('my_cool_view')->withSurveys($surveys);
}
person Piazzi    schedule 05.03.2019
comment
ฉันหวังว่าคุณจะไม่ว่าอะไร ฉันอัปเดตคำถามของคุณแล้ว ฉันกำลังตอบในขณะที่คุณโพสต์ของคุณและเนื่องจากคุณแนะนำแนวทางนี้ ฉันคิดว่านี่เป็นสิ่งที่ถูกต้องแทนที่จะโพสต์ด้วยตัวเอง คุณมีอิสระที่จะยกเลิกสิ่งนี้ได้หากต้องการ ขอให้เป็นวันที่ดี. - person Kenny Horna; 05.03.2019
comment
ขอบคุณสำหรับการแก้ไขเพื่อน ฉันไม่เป็นไร ขอให้เป็นวันดีๆ นะ :) - person Piazzi; 05.03.2019