[英]CodeIgniter: Displaying data from two tables in a view - use one loop?
请给我一些帮助。 我有这两个数据库表,关系为1-n(一个相册有很多图像):
albums images
---------- -------------
album_id img_id
title album_id
description img_file
现在,我想做的是在我的视图中显示所有带有其图像的专辑 ,类似这样 ,请参见第二张屏幕截图(作品集)。
这就是我的控制器中的内容:
// fetch all album data
$albums = $this->album_model->get();
// fetch images for each album
foreach ($albums as $album ) {
$images = $this->albumimage_model->get_by('album_id', $album->album_id);
}
$data = array(
'albums' => $albums,
'images' => $images,
);
$this->load->view('album_listing', $data);
如果我在视图中遍历相册数据,则会得到以下信息:
<?php foreach($albums as $album): ?>
<div class="album">
<p><?php echo $album->title; ?></p>
<p><?php echo $album->description; ?></p>
<div>
<?php endforeach; ?>
到目前为止,还不错,但是现在这里来了令人头疼: 我想显示属于每个专辑的图像 ,所以基本是这样的:
<?php foreach($albums as $album): ?>
<div class="album">
<p><?php echo $album->title; ?></p>
<p><?php echo $album->description; ?></p>
// show all images of the album
<div class="images"><img src="uploads/<php? echo $album->title; ?>.'/'.<php? echo $image->image_file; ?> " /></div>
<div>
<?php endforeach; ?>
根据CodeIgniter的惯例,我该怎么做?
一些其他信息:1.我还启用了CodeIgntier的Profiler,并且我注意到正在运行的查询以这种方式递增。 如果我有很多相册(50-100张带有图像的相册),这不会增加内存吗???
我还尝试仅使用一个带有JOIN的查询来执行此操作,如下所示:
$ albums = $ this-> db-> select('albums。*')-> select('images.img_id,images.img_file')-> join('images','images.album_id = albums.album_id') -> order_by('albums.album_id')-> get('albums')-> result_array();
问题是当我遍历数据时(假设我的数据库中有两个相册),我在页面上两次获取数据,例如:
album1 - images of album 1
album1 - images of album 1
album2 - images of album 2
album2 - images of album 2
$query = $this->db->get('albums');
$albums = $query->result_array();
$query = $this->db->get('images');
$images =$query->result_array();
foreach ($albums as $album)
{
foreach ($images as $image)
{
if($image['album_id'] == $album['album_id']){
$data[$album['album_id']]['images'] = $image['album_id'];
}
}
}
var_dump($data);
如果要消除重复的条目,请尝试在查询中使用SELECT DISTINCT
,这具有类似的作用。 另外,我不太了解您的意思是:
运行的查询像这样递增
你可以做一些跟从
控制器-
// fetch all album data <br>
$data['albums']= $this->album_model->get_albums();
// fetch all images<br>
$data['images']= = $this->album_model->get_images();
$this->load->view('album_listing', $data);<br>
查看(album_listing.php)
foreach ($albums as $album)
{
foreach ($images as $image)
{
if($image->album_id == $album->album_id)
echo "Album - ".$album->album_id.", Title".$album->title.", Description".$album->description." Image ID - ".$image->img_id."Img File - ".$image->img_file;
}
}
在您的模型中
public function get_images(){
{
$sql ="select a.album_id, a.description, i.img_id, i.img_file from album a, image i where a.album_id = i.album_id"
$query = $this->db->query($sql);
$data = array();
foreach ($query->result() as $row) {
$data[] = $row;
}
return $data;
}
调节器
$data['albums_img']= $this->album_model->get_images();
$this->load->view('album_listing', $data);
视图
foreach ($albums_img as $album)
{
echo "Album - ".$album->album_id.", Title".$album->title.", Description".$album->description." Image ID - ".$album->img_id."Img File - ".$album->img_file;
}
希望这对您有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.