sql >> Database >  >> RDS >> Mysql

Laravel 5.5 pivot join om pivot-waarden te krijgen met het belangrijkste MySQL-resultaat

Ik had een vergelijkbare situatie en ik Query Scope samen met mijn draaitabel voor een-op-veel-relatie. In mijn situatie heeft de gebruiker meerdere groepen en ik moet die gegevens samen met het gebruikersobject ophalen zonder extra query of zonder JOINs.Zie Query scope en een voor veel en veel voor veel met pivot op Laravel Doc.

Als u gegevens wilt ophalen met een draaitabel, volgt hier het voorbeeld
Gebruikersmodel:

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');
    }
}

Groepsmodel:

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

In bovenstaand gebruikersmodel, zie return $this->belongsToMany('App\Group','user_groups', 'user_id', 'group_id'); , waarbij user_groups mijn draaitabel is die de relatie tussen gebruikers en groep definieert. group_id en user_id zijn de velden in de draaitabel.

Nu gegevens ophalen (op controller) met behulp van bovenstaande architectuur:

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

waar detail() is mijn bereik gedefinieerd in het gebruikersmodel als scopeDetail . Opmerking:scope voorvoegsel moet worden toegevoegd. Dit geeft u de gebruiker met alle groepen waartoe de gebruiker behoort in een array, dus wanneer u uw gegevens in JSON bekijkt, kunt u de structuur op de juiste manier zien.

Met behulp van bovenstaande methode, mijn gebruiker object heeft alle groepen waartoe de gebruiker behoort.

Extra
Als uw gebruikersmodel (gebruikers) ook gerelateerd is aan andere modellen, kunt u deze allemaal opnemen door het bereik op de modelklasse te definiëren als

............
//..............
    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. Hoe u SQL Server-taken migreert van de ene SQL Server-instantie naar de andere?

  2. MySQL-gecodeerde kolommen

  3. Hoe maak je een willekeurig getal voor een kolom in mysql met DEFAULT Constraint?

  4. Kan de MySQL-bronquery niet laten werken met de Python mysqldb-module