मैंने व्यवस्थापक उपयोगकर्ता के एक विशेष समूह के लिए एक समूह स्थापित किया है जिसे नई सामग्री प्रकाशित होने पर अधिसूचित करने की आवश्यकता है। आइए तर्क के लिए इस समूह को 'सूचना-व्यवस्थापक' कहते हैं।

मेरे पास (उपयोगकर्ताओं और अनुमतियों के लिए अक्टूबर दस्तावेज़ों से लिया गया यह कोड है।

Mail::sendTo(UserGroup::where('code', 'notify-admins')->get()->users, 'mailTemplate', $data);

हालांकि, यह एक Property [users] does not exist on this collection instance फेंकता है तो स्पष्ट रूप से मैं कुछ गलत कर रहा हूँ!

मुझे बस समूह के सभी सदस्यों को एक ईमेल पॉप आउट करना है - सबसे अच्छा तरीका क्या है?

0
Hill79 28 जून 2019, 16:33

2 जवाब

सबसे बढ़िया उत्तर

तो, मैं इसे गलत तरीके से कर रहा था। उपयोगकर्ता समूह को क्वेरी करने के बजाय मुझे उन उपयोगकर्ताओं को देखने की आवश्यकता थी जो समूहों के सदस्य थे। यह वह कोड है जिसका उपयोग मैंने लक्ष्य समूह के भीतर उपयोगकर्ताओं का चयन करने के लिए किया और फिर उन पर ईमेल को पॉप आउट करने के लिए पुनरावृति की।

$admins = User::whereHas('groups', function($query) {
   $query->where('code', 'notify-admins');
})->get();

फिर ईमेल करने के लिए...

foreach ($admins as $admin) {
    Mail::sendTo($admin->email, mailTemplate, $data);
}
0
Hill79 2 जुलाई 2019, 12:06

मैं यह जानने के लिए उत्सुक हूं कि आप यह कोड कहां लिख रहे हैं? मैं एक प्लगइन पंजीकरण फ़ाइल मान रहा हूँ?

ये रहे आपके लिए दो जवाब। where() विधि वास्तव में उन समूहों का संग्रह लौटा रही है जहां 'कोड' 'सूचना-व्यवस्थापक' है। एक बेहतर उदाहरण में जहां किसी वस्तु की कीमत $200 है; आपके पास कई $200 आइटम हो सकते हैं। यदि आप संग्रह में users संपत्ति का उपयोग करना चाहते हैं तो आपको या तो फ़ोरैच लूप (या लूप के लिए) बनाना होगा या first() विधि को कॉल करना होगा।

आपके मामले में मुझे लगता है कि आप first() विधि को $backend = UserGroup::where('code', 'notify-admin')->first()->users; जैसे कॉल कर सकते हैं और मेल भेजने को निष्पादित करने का प्रयास कर सकते हैं। मैंने ईमेल भाग को निष्पादित करने का परीक्षण नहीं किया क्योंकि यह एक अन्य मुद्दा है।

आपकी समस्या का निदान करने और मुझे अपना उत्तर कैसे मिला, इसके निदान के लिए यहां कुछ युक्तियां दी गई हैं। टिप # 1 अपने आप को सूत्र के लिए बाध्य न करें। मैंने एक सीएमएस पेज बनाया और उसमें मुझे त्रुटियाँ देते हुए कोड का सेक्शन डाला:

function onStart() {
    $this['backend'] = UserGroup::where('code', 'moderator')->get()->users;
}

इसने मुझे एक त्रुटि दी क्योंकि यह UserGroup वर्ग नहीं ढूंढ सका। मुझे जोड़ना पड़ा:

\ बैकएंड \ मॉडल \ उपयोगकर्ता समूह का उपयोग करें;

इसके बाद इसने मुझे वह त्रुटि दी जो आपको मिली थी। युक्ति # 2 उन वस्तुओं को समझना जिनके साथ आप काम कर रहे हैं। इसलिए मैंने ->users को यह देखने के लिए हटा दिया कि मुझे केवल ->get() के साथ क्या मिल रहा है। यह अपने मॉडलों का एक संग्रह बनाता है जहां 'कोड' = 'सूचित-व्यवस्थापक'। खैर, यह मुझे first() जोड़ने की ओर ले जाता है:

$backend = UserGroup::where('code', 'notify-admin')->get()->first()->users;

या यह भी काम करता है

$backend = UserGroup::where('code', 'notify-admin')->first()->users;

0
Pettis Brandon 28 जून 2019, 21:19