Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah Saya Boleh Mendapatkan Hadirin dengan Cekap untuk Acara dengan Perhubungan Bersarang dalam Laravel?

Bagaimanakah Saya Boleh Mendapatkan Hadirin dengan Cekap untuk Acara dengan Perhubungan Bersarang dalam Laravel?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-13 17:27:02734semak imbas

How Can I Efficiently Retrieve Attendees for an Event with Nested Relationships in Laravel?

Masalah Perhubungan Bersarang Laravel: Menyelesaikan Pencarian Data Kompleks

Dalam Laravel, merapatkan hubungan rumit antara jadual pangkalan data selalunya terbukti mencabar. Pertimbangkan senario di mana anda berhasrat untuk mendapatkan semula hadirin acara dengan IDnya. Walau bagaimanapun, tugas ini rumit dengan kehadiran jadual perantara dalam rantaian perhubungan peristiwa-orang.

Untuk menangani isu ini, adalah penting untuk mentakrifkan perhubungan antara model anda dengan teliti. Dihuraikan di bawah ialah perhubungan model yang berkaitan:

Model Acara:

class Event extends Eloquent
{
    public function city()
    {
        return $this->belongsTo('City');
    }
}

Model Bandar:

class City extends Eloquent
{
    public function companies()
    {
        return $this->hasMany('Company');
    }
}

Syarikat Model:

class Company extends Eloquent
{
    public function persons()
    {
        return $this->hasMany('Person');
    }
}

Model Orang:

class Person extends Eloquent
{
    public function eventscore()
    {
        return $this->belongsToMany('Event', 'event_scores', 'person_id', 'event_id')->withPivot('score')->withTimestamps();
    }
}

Setelah menentukan perhubungan ini, mari kita terokai dua percubaan yang gagal untuk menyelesaikan isu:

return Event::with('city')->with('company')->get();
return Event::with('city')->whereHas('companies', function($query) use ($company_id){
        $query->where('company_id', $company_id);
    })->get();

Penyelesaian muktamad terletak pada penggunaan semangat yang fasih keupayaan memuatkan:

return Event::with('city.companies.persons')->get();

Pertanyaan ini mendapatkan semula acara bersama-sama dengan bandar yang berkaitan, syarikat dan orang yang dikaitkan dengan syarikat tersebut.

Sebagai alternatif, jika hanya medan tertentu daripada jadual orang yang diperlukan:

return Event::with(['city.companies.persons' => function ($query) {
    $query->select('id', '...');
}])->get();

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Hadirin dengan Cekap untuk Acara dengan Perhubungan Bersarang dalam Laravel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn