Как ще стане този код в CodeIgniter?

djman

Registered
PHP:
$q = mysql_query('SELECT * FROM categories WHERE subcategory_of = 0');
$data = array();
while($row = mysql_fetch_array($q)) $data[] = $row;

foreach($data as $k) {
    $q = mysql_query('SELECT * FROM categories WHERE subcategory_of = '.$k['category_id']);
    echo '<b>'.$k['title'].'</b>';
    while($row = mysql_fetch_array($q)) {
        echo '<em>'.$row['title'].'</em>';
    }
}

:idea: Идея си нямам как ще стане - да използвам 2 метода в модела, или всичко в 1... но пък извеждането как... :roll:
 
djman каза:
PHP:
$q = mysql_query('SELECT * FROM categories WHERE subcategory_of = 0');
$data = array();
while($row = mysql_fetch_array($q)) $data[] = $row;

foreach($data as $k) {
    $q = mysql_query('SELECT * FROM categories WHERE subcategory_of = '.$k['category_id']);
    echo '<b>'.$k['title'].'</b>';
    while($row = mysql_fetch_array($q)) {
        echo '<em>'.$row['title'].'</em>';
    }
}

:idea: Идея си нямам как ще стане - да използвам 2 метода в модела, или всичко в 1... но пък извеждането как... :roll:

PHP:
public function metodati(){
$a = $this->db->get_where("categories",array('subcategory_of'=>0));
return $a; 
}
PHP:
public function metodati2($a){
foreach($a->result_array() as $k) {
$aa = $this->db->get_where("categories",array('subcategory_of'=>$k['category_id']));
 echo '<b>'.$k['title'].'</b>';
     while($row = mysql_fetch_array($aa)) {
        echo '<em>'.$row['title'].'</em>';
    }
}
}
или
PHP:
public function metodati2($a){
foreach($a->result_array() as $k) {
$aa = $this->db->get_where("categories",array('subcategory_of'=>$k['category_id']));
 echo '<b>'.$k['title'].'</b>';
     foreach($aa->result_array() as $row) {
        echo '<em>'.$row['title'].'</em>';
    }
}
}
PHP:
public function controlerati(){
$this->load->model("modela");
$returnati = $this->modela->metodati();
$kymmodelasecondzaqvka = $this->modela->metodati2($returnati);
}

П.С кажи какво искаш да напаравиш за да знам какво да гледам ?
 
Искам да изкарам Категории и Подкатегории.

Например:

Категория1
-подкатегория1
-подкатегория3
Категория2
-подкатегория4
-подкатегория6

Като в базата данни са свързани така:
Код:
| category_id | subcategory_of | title |
----------------------------------------------
|          1       |         0             | Категория 1|
|          2       |         0             | Категория 2|
|          3       |         1             | Подкатегория 1|
|          4       |         1             | Подкатегория 3|
|          5       |         2             | Подкатегория 4|
|          6       |         2             | Подкатегория 6|

т.е. 0 - категории, а всичко останало е връзката със съответната категория...

Нещо просто, обяснено сложно,... надявам се да разбереш :)
 
Разбрах ти идеята... но ето нещо странно - ето 2 пробни метода:

PHP:
function get_cat() {
        $this->db->where('subcategory_of',0);
        $q = $this->db->get('categories');
            $data = array();
            if ($q->num_rows() > 0) {
                foreach ($q->result() as $row) {
                    $data[] = $row;
                }
            }
            return $data;
       
    }

    function get_subcat($sub = null) {
        foreach ($sub as $s) {
            $this->db->where('subcategory_of', $s->category_id);
            $q = $this->db->get('categories');


                $data = array();
                if ($q->num_rows() > 0) {
                    foreach ($q->result() as $row) {
                        $data[] = $row;
                    }
                }
                return $data;
            
        }
    }

и в контролера

PHP:
$data['cat'] = $this->Dbase->get_cat();
        $data['sub'] = $this->Dbase->get_subcat($data['cat']);

интересното е, че като изведа във view-то print_r($cat), ми извежда запис (един), който НЯМА нула в subcategory_of :shock:
 
Еми пак изкарва неочакван резултат - WHERE subcategory_of = 0, а изкарва резултат със subcategory_of = 4 :idea: .. и то един единствен...
 
Вместо иф сложи whle, трябва да стане.

или така

function get_subcat($sub = null) {
foreach ($sub as $s) {
$this->db->where('subcategory_of', $s->category_id);
$q = $this->db->get('categories');


$data = array();
if ($q->num_rows() > 0) {
foreach ($q->result() as $row) {
$data[] = $row;
return $data;
}
}


}
}

Я кажи как си извеждаш в Вю то.
 
ArchangelS каза:
Вместо иф сложи whle, трябва да стане.

така се получава безкраен цикъл ...

Не би трябвало онзи прост код който дадох в първото мнение да се прилага толкова сложно (ако е възможно изобщо :D) в CI ... Ясна е идеята, ама ето на ...
 
Изкарвам ги с print_r засега, и както ти казвам, метода get_cat() вади грешен резултат - where subcategory_of = 0, а то вади резултат със стойност "4" ... и от там няма как да се продължи. Много ми е чудно защо става така :roll:

edit- намерих защо .. тъпо ... както и да е. сега продължавам с останалото. като че ли краят е близо :D

edit 2 - уви, сега изкарва само главните категории. подкатегориите - не. о.о
 
Стигнах до следния момент:

модела
PHP:
function get_cat() {
        $this->db->where('subcategory_of', 0);
        $q = $this->db->get('categories');

        $data = array();
        if ($q->num_rows() > 0) {
            foreach ($q->result() as $row) {
                $data[] = $row;
            }
        }
        return $data;
    }

    function get_subcat($sub = null) {
        $this->db->where('subcategory_of', $sub);
        $q = $this->db->get('categories');


        $data = array();
        if ($q->num_rows() > 0) {
            foreach ($q->result() as $row) {
                $data[] = $row;
            }
        }
        return $data;
    }

контролера
PHP:
        $data['ct'] = $this->Dbase->get_cat();
        foreach($data['ct'] as $d)
        $data['sub'] = $this->Dbase->get_subcat($d->category_id);

$data['ct'] изкарва 2-те категории

но странното е, че $data['sub'] изкарва под-категориите само на едната категория. :idea:

и съответно става следното:

Кат 1: подкат1, подкат2
Кат2: подкат1, подкат2

foreach($data['ct'] as $d) изкарва само едното id (първото). Как да са и двете?
близо сме до победата!...:)
 
ArchangelS каза:
$data['ct']->result_array() в foreach-а.

foreach($data['ct']->result_array() as $d)

така ли :roll: не става, дава result_array() on a non-object
Интересно как $data['ct'] съдържа 2 записа, а след foreach-a остава един...
 
ArchangelS каза:
Пробвай да го сложиш в ретърна на гет кат.

return $data->result_array();

Сега същата грешка, само че в модела.

Това наистина ли има някаква роля, пробвах да го сменя при foreach ($q->result() as $row), но няма коренна разлика, резултата е същия (2 преди форийч и само 1 (първия) след ...) о.О

п.с. благодаря, че ми отделяш внимание)
 
$data['ct']->result_array() as $smt => $element Пробвай така и си изкарай елемента и кажи какво ти извежда.

Няма проблем :)
 
ми не става с ->result_array(), дава въпросната грешка.

Ако променя $q->result() на result_array() единствената промяна (изкарвам чрез print_r() засега), е че при result e stdClass Object , a при result_array е Array ... :roll:
 

Back
Горе