2012-10-17 14 views
5

लौटने पर मुझे कोडिनेटर में यह समस्या है: मैं डेटाबेस से नेविगेशन वृक्ष प्रणाली बनाने का प्रयास करता हूं।कोडिनेटर समूह_बी केवल पहली पंक्ति

मॉडल:

function getServices() 
{ 
$this->db->select('service_url, service_title, category_title');  
$this->db->join('services_category', 'services_category.id=services.category_id');  
$this->db->group_by('category_title'); 
$this->db->order_by('service_title', 'ASC');  
$query = $this->db->get('services'); 

if($query->result() == TRUE)  
{  
    foreach($query->result_array() as $row) 
    { 
     $result[] = $row; 
    } 
    return $result; 
    } 
} 

दृश्य:

<?php if(isset($services) && $services) : foreach($services as $s) : ?>  
    <ul> 
    <li><a href="#"><?php echo $s['category_title'] ?></a>  
     <ul> 
     <li><?php echo anchor('services/' . $s['service_url'], $s['service_title']); ?></li> 
     </ul>  
    </li>  
    </ul>  
<?php endforeach; ?>  
<?php endif; ?> 
अब

अब तक तो अच्छा है, परिणाम प्रत्येक श्रेणी रास्ता माना जाता है लौटा रहा है, लेकिन सेवा श्रेणी में केवल एक सेवा लौटा रहा है , और कुछ श्रेणियों में 15 सेवाओं की तरह है। कोई भी मुझे एक हाथ देने के लिए दयालु है, या एक स्पष्टीकरण क्या गलत हो रहा है? आपको बहुत बहुत धन्यवाद।

"मैं php या codeigniter में कोई विशेषज्ञ नहीं हूं, मैंने अभी बहुत समय पहले शुरू नहीं किया था, इसलिए कृपया शुरुआत करने वाले को शूट न करें।"

ध्यान दें: मैं group_by और order_by के बिना की कोशिश की, और सभी सेवाओं लौट रहा है, लेकिन श्रेणियों, दोहरा रहे हैं

पूर्व:

category-a 
    service1 
category-a 
    service2 
category-b 
    service10 
category-b 
    service11 
category-c 
    service30 
category-c 
    service31 
.... 

उत्तर

4

यह कुल कार्यों के लिए एक अच्छा पढ़ा जब Group By (MySQL) उपयोग कर रहा है । आसानी से समझा जा की तरह इस

Date  | Amount 
2012-01-01 | 5 
2012-01-01 | 6 
2012-01-02 | 1 
2012-01-02 | 6 

अब इस तरह योग में समेकित फ़ंक्शन का उपयोग कर जाएगा।

SELECT Date, SUM(Amount) as Total FROM table GROUP BY Date ORDER BY DATE; 

परिणाम होगा: के रूप में के रूप में यह केवल एक ही श्रेणी के बाद से आप प्रत्येक श्रेणी के द्वारा आपकी क्वेरी वर्गीकृत किया मिलेगा इरादा

Date  | Amount 
2012-01-01 | 11 
2012-01-02 | 7 

अपने परिदृश्य में, GROUP BY काम नहीं करेगा।

इसका आदर्श समाधान 2 अलग-अलग फ़ंक्शन, GetCategories और GetServices होना है।

function getServices($category_id = false) 
{ 
    $this->db->select('service_url, service_title, category_title'); 
    $this->db->join('services_category', 'services_category.id=services.category_id'); 
    if ($category_id !== false) 
    $this->db->where('services.category_id', $category_id); 
    $this->db->order_by('service_title', 'ASC'); 
    $query = $this->db->get('services'); 

    if($query->result() == TRUE) 
    { 
    foreach($query->result_array() as $row) 
    { 
     $result[] = $row; 
    } 
    return $result; 
    } 
} 

function getCategories() 
{ 
    $this->db->select('category_id, category_title'); 
    $this->db->order_by('category_title', 'ASC'); 
    $query = $this->db->get('services_category'); 

    if($query->result() == TRUE) 
    { 
    foreach($query->result_array() as $row) 
    { 
     $result[] = $row; 
    } 
    return $result; 
    } 
} 

फिर अपने दृश्य फ़ाइल में, तुम बस फिर श्रेणियाँ पाश के लिए एक कर प्रत्येक श्रेणी के लिए एक और क्वेरी करने की ज़रूरत है। यहाँ यह कैसा दिखेगा की एक रूपरेखा,

<?php if(isset($categories) && $categories) : foreach($categories as $category) : ?> 
    <ul> 
    <li><a href="#"><?php echo $category['category_title'] ?></a> 
     <ul> 
     // how you get $services is similar to how you get $categories 
     <?php $services = $this->modelname->getServices($category['category_id']); 
     <?php foreach($services as $s) : ?> 
      <li><?php echo anchor('categories/' . $s['service_url'], $s['service_title']); ?></li> 
     <?php endforeach; ?> 
     </ul> 
    </li> 
    </ul> 
<?php endforeach; ?> 
<?php endif; ?> 
+0

आदमी है, तो आप एक पौराणिक कथा कर रहे हैं, मैं भगवान मैं 4hours पर इस लिए देख रहा था और कोई जवाब नहीं कसम, निश्चित रूप से मैं ब्लॉग पर इस बारे में एक ट्यूटोरियल लिखेंगे, और बेशक मैं आपको जिक्र करूँगा.बहुत बहुत धन्यवाद, मैं वास्तव में आपकी मदद की सराहना करता हूं – lesandru

+0

असल में मैं आपको कुछ पूछना चाहता हूं अगर ज्यादा नहीं है, तो क्या मॉडल को देखने के लिए यह अच्छा अभ्यास है? एमवीसी तोड़ नहीं है? – lesandru

+1

हाय एलेक्स, यह एमवीसी को तोड़ता नहीं है क्योंकि आपने अभी भी मॉडल में अपनी डेटा परिभाषा को बनाए रखा है, आपने अपने मॉडल में मॉडल के तरीकों का खुलासा किया है, जो आदर्श रूप से नियंत्रक स्तर पर होना चाहिए। मैं आमतौर पर हेल्पर्स का उपयोग करता हूं ताकि नियंत्रकों/विचारों के मॉडल से सभी कॉल मददगार हों। – ace

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