У меня есть две таблицы — изображения и категории, которые выглядят так:
CREATE TABLE `categories` (
`id` int(11) NOT NULL,
`title` varchar(255) NOT NULL,
`user_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `images` (
`id` int(11) NOT NULL,
`categories_id` int(11) NOT NULL,
`file` text NOT NULL,
`caption` text NOT NULL,
`description` text NOT NULL,
`user_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
У меня есть 4 категории, и мне нужно фильтровать и отдельно показывать изображения каждой категории
Я пытаюсь, как это, но он отображает все изображения
**Model:**
public function org_filter()//filter categories
{
$this->db->select('i.file,i.categories_id,c.id,c.title',false);
$this->db->from('images as i');
$this->db->join('categories as c','i.categories_id = c.id','inner');//join tables based on the foreign key
$this->db->where('c.title','organizers');//set filter
$query = $this->db->get();//get data*/
return $query;
}
**Controller**
$data=array(
'r_images' => $this->Gallery_model->org_filter(),
);
$this->load->view('layouts/main', $data);
**View**
<h3 class="svgbg">ORGANIZERS</h3><!--name of the first category-->
<?php foreach($r_images->result() as $img) : ?>
<div>
<div class="thumbnail">
<?=img($img->file)?>
</div>
</div>
<?php endforeach; ?>
Поэтому моя цель — сделать динамическую выборку из БД для просмотра.
П.С .: Извините за плохой японский
Вы можете попробовать этот код для вашего решения ..
Category_model.php
добавить эту функцию в cagetory модели
//Model Category
public function get_category(){
$q = "select * from categories";
$rs = $this->db->query($q);
return $rs->result();
}
Gallery_model.php
добавить эту функцию в галлерею модели.
//Gallery_model
public function org_filter($categoryId)//filter categories
{
$q = "SELECT * FROM images INNER JOIN categories on images.categories_id = categories.id WHERE categories.id =".$categoryId;
$q = $this->db->query($q)->result();
return $q;
}
Gallery.php
следующий код добавить в контроллер галереи.
function index()
{
$category = $this->dashboard_model->get_category();
$data = array();
//Controller
//$category = $this->Category_model->get_category();
foreach ($category as $key => $value) {
$data['category'][$key]['title'] = $value->title;
$data['category'][$key]['r_images'] = $this->dashboard_model->org_filter($value->id);
}
$this->load->view('layouts/main', $data);
}
main.php
следующий код добавить в представление файла main.php
<h3 class="svgbg">ORGANIZERS</h3><!--name of the first category-->
<?php foreach($category as $img) :?>
<div>
<?php echo "Category Name: ".$img['title'];?> <br>
<?php foreach($img['r_images'] as $imgage) :?>
<div class="thumbnail">
<?=img($imgage->file)?> <br>
</div>
<?php endforeach; ?>
</div>
<?php endforeach; ?>
выше всего кода добавьте вашу модель, контроллер и вид. Вы можете получить идеальный выход.
Кажется, вы забыли предложение where, поэтому все изображения возвращаются.
попробуйте изменить функцию org_filter следующим образом:
public function org_filter($categoryId)//filter categories
{
$this->db->select('*');
$this->db->from('images');
$this->db->join('categories','images.categories_id = categories.id','inner');//join tables based on the foreign key
$this->db->where('categories.id',$categoryId);
$this->db->on('images.id',10);//set filter
$query = $this->db->get();//get data
return $query;
}