Возврат и использование многомерного массива записей из базы данных в CodeIgniter 2.0

#php #codeigniter

#php #codeigniter

Вопрос:

Привет, ребята! Ну, я пробовал codeigniter, но мне кажется, что я допустил какую-то путаницу при попытке извлечь и отобразить данные из таблиц, вот фрагмент кода.

Я хочу получить все статьи, хранящиеся в моей таблице article, вместе с этим мне нужно извлечь все теги, связанные с каждой статьей, из таблицы отношений и таблицы тегов, называемых articleTagRelation и tags соответственно

Структура таблицы :

Таблица статей: articleId, articleContent, дата
Таблица тегов: TagID, tagName 
articleTagRelation : aricleID,TagID {Комбинация обоих является моим первичным ключом}
Модель CI :

article_model.php

 общедоступная функция getAllTags($postID){
 $this-> db->select('articleTagRelation.TagID как TagID, articleTagRelation.postID как postID, article.tagName как tagName,');
 $this->db->from('articleTagRelation');
 $this->db->join('Теги','Теги.TagID = articleTagRelation.TagID');
 $this-> db->where('ArticleTagRelation.articleId',$postID);
 $qTag = $this->db->get(); 
 if($qTag->num_rows() > 0){ 
 foreach ($qTag->result() как $tag) {
 возвращает $tag;
 }
 }
 }

 общедоступная функция getAllArticles(){
 $this->db->select('*');
 $this->db->from('Статья');
 $this->db->order_by('date','desc');
 $query=$this->db->get(); 
 if($query->num_rows()>0){
 foreach ($query->result() как $row) {
 $data['row'] = $row;
 $data['articletags'] = $this->getAllTags($row-> articleId); // Я пытаюсь получить массив всех ассоциированных тегов.
 $post=массив($data['строка'],$data['теги статей']);
 } 
 }else{
 echo 'ничего не найдено!';
 } 
 вернуть $post; 
 }
мой файл контроллера 
article.php
Я вызываю эту функцию в функции index 
 $data['rows'] = $this->blog_model->getAllArticles(); 
и затем загрузка представления путем передачи массива данных 
теперь та часть, где все становится беспорядочным 
на мой взгляд 
 
 echo $r-> articleId // работает нормально 
 echo $ r-> articletags-> TagID // выдает мне сообщение об ошибке


Может ли кто-нибудь помочь мне в печати этих тегов

Ответ №1:

Во-первых, вам вообще не нужен foreach для получения информации о теге, она возвращается из query_result.

вот так…

 if($qTag->num_rows() > 0){
    return $qTag->result();
}
else {
    return array();  //return empty array if no tags
}
  

Затем, чтобы создать свою статью, сделайте это с getAllArticles()

 public function getAllArticles(){

    // removed uneccessary select and from
    // the below accomplishes the same thing
    $this->db->order_by('date','desc');
    $query = $this->db->get('Article');

    if ( $query->num_rows() > 0 ) {

        // store the result in a variable you will end up returning
        $articles = $query->result();

        // make sure you foreach by reference so that changes you make
        // to the interated $article will be made to the actual article
        // result
        foreach ($articles as amp;$article) {

            // create a new property of your article "tags" and save an
            // array of tags in it
            $article->tags = $this->getAllTags( $article->articleId );
        }

    } else {
        echo 'nothing found !';
    }

    return $articles;
}
  

Последнее, что следует отметить, это то, что когда вы теперь ссылаетесь на $r->tags это массив, поэтому вы можете foreach обрабатывать все теги ИЛИ ссылаться на индекс, подобный $r->tags[3]->tagId

Комментарии:

1. Спасибо @jondavidjohn. Я потратил много часов, думая, как это сделать. однажды я погуглил, получил ваш ответ и впервые выполнил свою работу в течение 2 минут. Большое вам спасибо.

Ответ №2:

 if($qTag->num_rows() > 0){
    foreach ($qTag->result() as $tag) {
          $tags[] = $tag; //this create the array with the result
    }
    return $tags;
}
  

«$r-> articletags-> TagID» работает, только если вы возвращаете результаты в виде объекта, вместо этого используйте «$ r-> articletags[‘TagID’]».

Комментарии:

1. Я попробовал это, но у меня не получилось : (спасибо за ответ 🙂