Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Laravel 5.5 pivot join untuk mendapatkan nilai pivot dengan hasil MySQL utama

Saya memiliki situasi yang sama dan saya Cakupan Kueri bersama dengan tabel pivot saya untuk relasi satu ke banyak. Dalam situasi saya, Pengguna memiliki beberapa grup dan saya perlu mengambil data tersebut bersama dengan objek pengguna tanpa kueri tambahan atau tanpa GABUNG. Lihat Query scope dan satu ke banyak dan banyak ke banyak dengan pivot di Laravel Doc.

Jika Anda ingin mengambil data menggunakan tabel pivot, berikut adalah contoh
User Model:

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 Grup:

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

Dalam model pengguna di atas, lihat return $this->belongsToMany('App\Group','user_groups', 'user_id', 'group_id'); , di mana user_groups adalah tabel pivot saya yang mendefinisikan hubungan antara pengguna dan grup. group_id dan user_id adalah kolom dalam tabel pivot.

Sekarang Mengambil data (pada pengontrol) menggunakan arsitektur di atas:

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

di mana detail() apakah cakupan saya didefinisikan dalam model Pengguna sebagai scopeDetail . Catatan:scope awalan harus dilampirkan. Ini akan memberi Anda pengguna dengan semua grup tempat pengguna berada dalam array, jadi setiap kali Anda melihat data Anda di JSON, Anda dapat melihat strukturnya dengan cara yang benar.

Dengan menggunakan metode di atas, pengguna saya objek memiliki semua grup tempat pengguna berada.

Ekstra
Jika model pengguna Anda (pengguna) terkait dengan model lain juga, Anda dapat memasukkan semua itu dengan mendefinisikan cakupan pada kelas model sebagai

............
//..............
    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. Bagaimana cara menyimpan data sesi PHP ke database alih-alih di sistem file?

  2. Bagaimana saya bisa membangun kembali indeks dan memperbarui statistik di MySQL innoDB?

  3. Kembalikan Hanya Nilai Numerik di MySQL

  4. Tetapkan nilai berulang ke 0 sambil membiarkan nilai pertama saja

  5. Bagaimana cara menampilkan skema tabel di database MySQL?