2010-08-24 9 views
5

मैं ढांचे को सीख रहा हूं, और अब इसका उपयोग कर एक आवेदन बना रहा हूं।कोहाना 3 ऑथ मॉड्यूल, उपयोगकर्ताओं को 'कर्मचारी' या 'प्रबंधक' भूमिका के साथ प्राप्त करना

मुझे उन सभी उपयोगकर्ताओं को प्राप्त करने की आवश्यकता है जिनमें 'उपयोगकर्ता' या 'कर्मचारी' भूमिका है, लेकिन मुझे दस्तावेज़ पर इसके बारे में पता नहीं लगा।

किसी की भी मदद करें? (मुझे लगता है कि यह ऑथ मॉड्यूल की एक ओआरएम समस्या है)

उत्तर

9

मुझे ओआरएम का उपयोग करके ऐसा करने का कोई आसान तरीका नहीं मिला, लेकिन मेरे पास एक कामकाज है।
यह मेरा कोड है जो मेरे साथ एक ही समस्या का सामना कर सकता है।

// One for each role 
$staffs = ORM::factory('role', array('name' => 'staff'))->users->find_all()->as_array(); 
$managers = ORM::factory('role', array('name' => 'manager'))->users->find_all()->as_array(); 

// Merge the results 
$results = array_merge($staffs, $managers); 
+0

यह मेरे लिए काम करता है, अगर आपके पास कोई बेहतर विकल्प है तो इसे यहां पोस्ट करने के लिए स्वतंत्र महसूस होता है। – leonardys

+0

मुझे विश्वास है कि यह वही तरीका है जो इसे किया जाना चाहिए। यह भी ध्यान दें कि 'array_merge()' के बजाय आप ऐरे सहायक का उपयोग कर सकते हैं: '$ results = Arr :: विलय ($ कर्मचारी, $ प्रबंधक);'। सधन्यवाद। –

1

क्या आपको इसके लिए एक अलग ओआरएम विधि बनाना चाहिए? इस कोड की तरह कुछ:

public function get_users(array $roles) 
{ 
    $users = DB::select(array($this->_has_many['roles']['foreign_key'], 'id')) 
       ->distinct(TRUE) 
       ->from($this->_has_many['roles']['through']) 
       ->where($this->_has_many['roles']['far_key'], 'IN', DB::expr('('.implode(',', $roles).')')) 
       ->execute($this->_db); 
    if (count($users) == 0) 
    { 
     // return empty list 
     return array(); 
    } 
    // now we need only IDs from result 
    $ids = array(); 
    foreach($users as $columns) 
    { 
     $ids[] = $columns['id']; 
    } 
    // load users by id 
    return $this->where($this->_primary_key, 'IN', DB::expr('('.implode(',', $ids).')'))->find_all(); 
} 

$ भूमिकाओं एक ROLE_ID सरणी है (नहीं के नाम!)। पीएस। मुझे याद नहीं है कि 'WHERE IN' से पूछताछ कैसे करें, इसलिए मैं डीबी अभिव्यक्तियों का उपयोग करता हूं।

+0

मैनुअल एसक्यूएल क्वेरी हमेशा उपलब्ध है, लेकिन मैंने सोचा था कि ओआरएम उस समस्या को बॉक्स से बाहर हल कर सकता है। मेरे पास क्वेरी बिल्डर के साथ कई अनुभव नहीं हैं, मैं इसे देखता हूं। वैकल्पिक उत्तर के लिए धन्यवाद। – leonardys

+0

जैसा कि आप देख सकते हैं, मेरा कोड $ -> _ has_many ['भूमिकाएं] सेटिंग्स का उपयोग करता है, इसलिए यदि आप संबंधित मॉडल या विदेशी_की बदलते हैं, तो यह विधि बिना किसी संशोधन के (बिना सादे SQL क्वेरी के) काम करेगी। – biakaveron

+0

करता है '-> कहां ($ यह -> _ प्राथमिक_key,' IN ', $ ids)' काम नहीं करता है? –

संबंधित मुद्दे