मेरी भी ऐसी ही स्थिति थी और मेरी क्वेरी स्कोप
थी एक से कई संबंधों के लिए मेरी पिवट टेबल के साथ। मेरी स्थिति में, उपयोगकर्ता के कई समूह हैं और मुझे उन डेटा को उपयोगकर्ता ऑब्जेक्ट के साथ अतिरिक्त क्वेरी के बिना या जॉइन के बिना लाने की आवश्यकता है। देखें Query scope
और एक से अनेक और लारवेल डॉक्टर पर धुरी के साथ अनेक से अनेक।
यदि आप पिवट टेबल का उपयोग करके डेटा प्राप्त करना चाहते हैं, तो यहां उदाहरण है
उपयोगकर्ता मॉडल:
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');
}
}
समूह मॉडल:
class Group extends Model
{
protected $fillable = [
'dn', 'cn', 'description',
];
}
उपरोक्त उपयोगकर्ता मॉडल में, देखें return $this->belongsToMany('App\Group','user_groups', 'user_id', 'group_id');
, जहां user_groups मेरी पिवट तालिका है जो उपयोगकर्ताओं और समूह के बीच संबंध को परिभाषित करती है। group_id
और user_id
पिवट तालिका में फ़ील्ड हैं।
अब उपरोक्त आर्किटेक्चर का उपयोग करके डेटा (नियंत्रक पर) लाया जा रहा है:
User::where(.....)->detail()->first();
जहां detail()
क्या मेरा दायरा उपयोगकर्ता मॉडल में scopeDetail
. के रूप में परिभाषित किया गया है? . नोट:scope
उपसर्ग संलग्न करना होगा। यह आपको उपयोगकर्ता को उन सभी समूहों के साथ देगा जो उपयोगकर्ता सरणी में हैं, इसलिए जब भी आप JSON में अपना डेटा देखते हैं तो आप संरचना को उचित तरीके से देख सकते हैं।
उपरोक्त विधि का उपयोग करते हुए, मेरे उपयोगकर्ता ऑब्जेक्ट में वे सभी समूह हैं जिनसे उपयोगकर्ता संबंधित है।
अतिरिक्त
यदि आपका उपयोगकर्ता मॉडल (उपयोगकर्ता) अन्य मॉडलों से भी संबंधित है तो आप मॉडल वर्ग के दायरे को परिभाषित करके उन सभी को शामिल कर सकते हैं
............
//..............
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
}
........
........