#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. Я попробовал это, но у меня не получилось : (спасибо за ответ 🙂