sql >> Database teknologi >  >> RDS >> Mysql

Laravel 5.5 pivot join for at få pivot værdier med hoved MySQL resultat

Jeg havde en lignende situation, og jeg Forespørgselsomfang sammen med min pivottabel for en til mange relation. I min situation har brugeren flere grupper, og jeg skal hente disse data sammen med brugerobjektet uden ekstra forespørgsel eller uden JOINs. Se Query scope og én til mange og mange til mange med pivot på Laravel Doc.

Hvis du vil hente data ved hjælp af pivottabel, er her eksemplet
Brugermodel:

class User extends Authenticatable
{
    use Notifiable;


    protected $fillable = [
        'name', 'email', 'username', 'password',
    ];


    protected $hidden = [
        'password', 'remember_token',
    ];


    public function groups()
    {
        return $this->belongsToMany('App\Group', 'user_groups', 
          'user_id', 'group_id');
    }
    public function scopeDetail($query)
    {
        return $query->with('groups');
    }
}

Gruppemodel:

class Group extends Model
{
    protected $fillable = [
        'dn', 'cn', 'description',
    ];
}

I ovenstående brugermodel, se return $this->belongsToMany('App\Group','user_groups', 'user_id', 'group_id'); , hvor user_groups er min pivottabel, som definerer forholdet mellem brugere og gruppe. group_id og user_id er felterne i pivottabellen.

Henter nu data (på controller) ved hjælp af ovenstående arkitektur:

User::where(.....)->detail()->first();

hvor detail() er mit omfang defineret i Brugermodel som scopeDetail . Bemærk:scope præfiks skal vedhæftes. Dette vil give dig brugeren med alle de grupper, som brugeren tilhører i array, så hver gang du ser dine data i JSON, kan du se strukturen på den rigtige måde.

Ved at bruge ovenstående metode, min bruger objektet har alle de grupper, som brugeren tilhører.

Ekstra
Hvis din brugermodel(brugere) også er relateret til andre modeller, kan du inkludere alle dem ved at definere omfanget på modelklassen som

............
//..............
    public function profile()
    {
        return $this->belongsToMany('App\Profile', 'user_id');
    }
    public function data1()
    {
        return $this->belongsToMany('App\Data1', 'user_id');
    }
    public function groups()
    {
        return $this->belongsToMany('App\Group', 'user_groups', 
          'user_id', 'group_id');
    }
    //Defining query scope................
    public function scopeDetail($query)
    {
        return $query->with('groups','profile','data1');
        //to fetch user with this scope use User::where(.....)->detail()->get(); notice there is not scope prefix while using the scope
    }
........
........



  1. Sådan får du overordnet tabel, referencetabel, navn på fremmednøglebegrænsning og kolonner i SQL Server - SQL Server / TSQL vejledning del 71

  2. SQL:Begrænsning af CASE (antal af NÅR, SÅ betingelser)

  3. Spring kolonne over, når du indsætter i MySQL

  4. Hvordan udtrækkes år og måned fra dato i PostgreSQL uden at bruge to_char()-funktionen?