Tôi đã gặp trường hợp tương tự và tôi Phạm vi truy vấn
cùng với bảng tổng hợp của tôi cho mối quan hệ từ một đến nhiều. Trong tình huống của tôi, Người dùng có nhiều nhóm và tôi cần tìm nạp những dữ liệu đó cùng với đối tượng người dùng mà không cần truy vấn bổ sung hoặc không có THAM GIA. Xem Query scope
và một đến nhiều và nhiều thành nhiều với xoay trên Laravel Doc.
Nếu bạn muốn tìm nạp dữ liệu bằng cách sử dụng bảng pivote, đây là ví dụ
Mô hình người dùng:
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');
}
}
Mô hình nhóm:
class Group extends Model
{
protected $fillable = [
'dn', 'cn', 'description',
];
}
Trong mô hình người dùng ở trên, hãy xem return $this->belongsToMany('App\Group','user_groups', 'user_id', 'group_id');
, trong đó user_groups là bảng tổng hợp của tôi xác định mối quan hệ giữa người dùng và nhóm. group_id
và user_id
là các trường trong bảng pivote.
Hiện đang tìm nạp dữ liệu (trên bộ điều khiển) bằng cách sử dụng architechture trên:
User::where(.....)->detail()->first();
ở đâu detail()
phạm vi của tôi có được xác định trong Mô hình người dùng là scopeDetail
không . Lưu ý:scope
tiền tố phải được đính kèm. Điều này sẽ cung cấp cho bạn người dùng với tất cả các nhóm mà người dùng thuộc về trong mảng, vì vậy bất cứ khi nào bạn xem dữ liệu của mình trong JSON, bạn có thể thấy cấu trúc theo cách phù hợp.
Sử dụng phương pháp trên, người dùng của tôi đối tượng có tất cả các nhóm mà người dùng thuộc về.
Thêm
Nếu mô hình người dùng của bạn (người dùng) cũng liên quan đến các mô hình khác thì bạn có thể bao gồm tất cả những người đó bằng cách xác định phạm vi trên lớp mô hình là
............
//..............
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
}
........
........