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
}
........
........