Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Połączenie obrotowe Laravel 5.5, aby uzyskać wartości przestawne z głównym wynikiem MySQL

Miałem podobną sytuację i Zakres zapytania wraz z moją tabelą przestawną dla relacji jeden do wielu. W mojej sytuacji użytkownik ma wiele grup i muszę pobrać te dane wraz z obiektem użytkownika bez dodatkowego zapytania lub bez JOIN. Zobacz Query scope i jeden do wielu i wiele do wielu z przestawieniem na Laravel Doc.

Jeśli chcesz pobrać dane za pomocą tabeli przestawnej, oto przykład
Model użytkownika:

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

Model grupy:

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

W powyższym modelu użytkownika zobacz return $this->belongsToMany('App\Group','user_groups', 'user_id', 'group_id'); , gdzie user_groups to moja tabela przestawna, która definiuje relacje między użytkownikami a grupą. group_id i user_id są polami w tabeli przestawnej.

Teraz Pobieranie danych (na kontrolerze) przy użyciu powyższej architektury:

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

gdzie detail() czy mój zakres jest zdefiniowany w modelu użytkownika jako scopeDetail? . Uwaga:scope przedrostek musi być dołączony. To da ci użytkownika ze wszystkimi grupami, do których należy użytkownik w tablicy, więc za każdym razem, gdy przeglądasz swoje dane w JSON, możesz zobaczyć strukturę we właściwy sposób.

Używając powyższej metody, mój użytkownik obiekt posiada wszystkie grupy, do których należy użytkownik.

Dodatkowe
Jeśli Twój model użytkownika (użytkownicy) są również powiązane z innymi modelami, możesz uwzględnić je wszystkie, definiując zakres klasy modelu jako

............
//..............
    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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak napisać procedurę składowaną za pomocą phpmyadmina i jak z niej korzystać za pośrednictwem php?

  2. jak obliczyć pozostały czas za pomocą php i mysql?

  3. Jak wybrać identyfikator wiersza mysql dla klauzuli WHERE na UPDATE, INSERT, DELETE przez php?

  4. Co powinien wiedzieć każdy programista PHP?

  5. Wybieranie wierszy MYSQL o tych samych nazwach pól i dodawanie prefiksu