मैंने एक परियोजना के लिए एक मैसेजिंग सिस्टम बनाया है जिस पर मैं काम कर रहा हूं और लगता है कि यह एक ठोकर खा रहा है।लैरवेल एलोक्वेंट पूछताछ संबंध
मैं निम्न तालिका संरचनाओं (irrelevent कॉलम स्पष्टता के लिए छोड़े गए)
messages
-------------------------
from_id to_id spam
users
-------------------------
id group_id
groups
-------------------------
id access_level
पहुंच का स्तर बिटवाइज़ अनुमतियों का उपयोग करता है
001 read
010 write
100 delete
तो
पढ़ना और लिखना, पहुंच का स्तर होगा '3 '
उपयोगकर्ताओं को साइट व्यवस्थापक द्वारा निरस्त अनुमतियां मिल सकती हैं, इसलिए मैं जो करने का प्रयास कर रहा हूं वह उन संदेशों को चुनना है जो प्रेषक अभी भी हैं लिखने की अनुमति है। निम्नलिखित
Message::with(['from' => function($query)
{
$query->with(['group' => function($_query)
{
$_query->where('access_level', '&', 2);
}]);
}])
->where('to_id', Auth::user()->id)
->get();
अपने मॉडल में इस तरह के (फिर केवल प्रासंगिक दिखाया भागों)
class User extends Eloquent {
public function group() {
return $this->belongsTo('Group');
}
}
class Message extends Eloquent {
public function to() {
return $this->belongsTo('User', 'to_id');
}
public function from() {
return $this->belongsTo('User', 'from_id');
}
}
मैं कोशिश की है के रूप में स्थापित कर रहे हैं यह उपयोगकर्ता में करने के लिए वर्तमान में लॉग भेजे गए संदेशों को होता है, जिसमें प्रेषक समूह का पहुंच स्तर अभी भी उपयोगकर्ता को संदेश लिखने में सक्षम बनाता है (सैद्धांतिक रूप से) हालांकि यह उपयोगकर्ता को भेजे गए सभी संदेशों को वापस कर रहा है।
मैं भी विशेष रूप से समूह को लक्षित की कोशिश की है (समूहों 6 और 7 प्रतिबंध लगा रहे हैं और अपुष्ट खाते):
Message::with(['from' => function($query)
{
$query->whereNotIn('group_id', [6,7])
}])
->where('to_id', Auth::user()->id)
->get();
जो भी उपयोगकर्ता के लिए गए संदेशों के सभी देता है।
tl;dr
कैसे, सुवक्ता का उपयोग कर, मैं जहां प्रेषकों समूह लिखने की अनुमति है एक उपयोगकर्ता के लिए भेजे गए सभी संदेशों का चयन करेंगे?
edit
, ::with
, संदेश जो खींच लिया हो कोई असर नहीं पड़ेगा, क्योंकि यह केवल में शामिल हो गए टेबल के आलसी लोड हो रहा है है।
समस्या यह है कि न केवल समूह 2 में लोग संदेश लिखने में सक्षम होंगे, इसलिए मुझे यह जांचने की आवश्यकता है कि उपयोगकर्ता समूह अनुमतियों में 'लेखन' अनुमति है, और ':: साथ' भी प्रभावित नहीं करता है मुख्य मॉडल, बस उत्सुक (ly) -loaded मॉडल। –