[英]codeigniter join database tables
我有2个数据库表,一个用于职位,另一个用于类别,每个职位都由类别ID分配给一个类别。
我想在帖子页面上显示类别名称,并且在每个帖子上我都想显示分配给它的类别,所以我做了一个联接数据库表,类别名称在主帖子页面上正常显示,但是当我单击该类别现在正在显示的帖子,我得到一个Undefined index: name
型号代码:
<?php
class Yacht_model extends CI_Model{
public function __construct(){
$this->load->database();
}
public function get_yachts($slug = FALSE){
if ($slug === FALSE) {
$this->db->join('categories', 'categories.cat_id = yachts.category');
$query = $this->db->get('yachts');
return $query->result_array();
}
$query = $this->db->get_where('yachts', array('slug' => $slug));
return $query->row_array();
}
public function get_yachts_by_category($cat_id){
$this->db->join('categories', 'categories.cat_id = yachts.category');
$query = $this->db->get_where('yachts', array('category' => $cat_id));
return $query->result_array();
}
}
?>
控制器代码:
<?php
class Yachts extends CI_Controller{
public function index(){
$data['title'] = 'Yachts';
$data['yachts'] = $this->yacht_model->get_yachts();
$this->load->view('templates/header');
$this->load->view('yachts/index', $data);
$this->load->view('templates/footer');
}
public function view($slug = NULL){
$data['yacht'] = $this->yacht_model->get_yachts($slug);
if(empty($data['yacht'])){
show_404();
}
$this->load->view('templates/header');
$this->load->view('yachts/view', $data);
$this->load->view('templates/footer');
}
}
?>
发布的HTML代码:
<section>
<div class="rows inner_banner inner_banner_2">
<div class="container">
<h2><span><?php echo $yacht['name']; ?></span></h2>
<ul>
<li><a href="#inner-page-title">Anasayfa</a>
</li>
<li><i class="fa fa-angle-right" aria-hidden="true"></i> </li>
<li><a href="#inner-page-title" class="bread-acti">Gulet Kiralama</a>
</li>
</ul>
</div>
</div>
</section>
$yacht['name'];
来自类别表,它应显示类别名称。
我不确定我是否足够清楚地解释了我的问题,如果不足够,请告诉我,我可以为您提供所需的任何信息或详细信息。
1)您需要使用post_id从数据库中获取该类别名称。
要么
2)您可以将类别和帖子名称映射数组存储在会话中,并且可以从会话数据中显示相关帖子的类别名称。
如果您有职位和类别表,则可以使用联接或通过传递类别ID来创建返回类别名称的函数来访问它,让我同时向您展示
1st通过使用Join in Your Post模式创建此功能
function getPosts(){
$this->db->select('post.*,post_category.*')
->from('post')
->join('post_category','post_category.id=post.post_category','left');
$query = $this->db->get();
return $query->result_array();
}
类别模型写入功能中的第二种方法
public function getCategoryById($id = Null){
$query = $this->db->get_where('post_category',array('id'=>$id));;
return $query->row()->category_title;
}
如果使用第一种方法,则视图文件中的代码将类似于
<?php if(isset($posts) && count($posts) > 0){
foreach($posts as $k => $val){
?>
<tr>
<td><?php echo $k++?></td>
<td><?php echo $val['post_title']?></td>
<td><?php echo $val['post_content']?></td>
<td><?php echo $val['category_title']?></td>
<td><?php echo $val['slug']?></td>
</tr>
<?php } } ?>
如果您想使用第二种方法,则视图中的代码将类似于
<?php if(isset($posts) && count($posts) > 0){
foreach($posts as $k => $val){
?>
<tr>
<td><?php echo $k++?></td>
<td><?php echo $val['post_title']?></td>
<td><?php echo $val['post_content']?></td>
<td><?php echo $this->category_model->getCategoryById($val['post_category'])?></td>
<td><?php echo $val['slug']?></td>
</tr>
<?php } } ?>
希望对您有帮助
您可以尝试这个简单的查询。 我希望这会如您所愿。
$getData=$this->db->query("SELECT table1.*, table2.* FROM table1 JOIN table2 ON table1.id=table2.id and table1.id='1'");
$result=$getData->result_array();
echo '<pre>';
print_r($result);
我找到了解决方法,我在默认设置为FALSE的if语句中制作了联接表,这就是为什么在帖子页面中联接不起作用的原因,但是当我将其放置在if语句之外时,它可以正常工作
之前:
public function get_yachts($slug = FALSE){
if ($slug === FALSE) {
$this->db->join('categories', 'categories.cat_id = yachts.category');
$query = $this->db->get('yachts');
return $query->result_array();
}
$query = $this->db->get_where('yachts', array('slug' => $slug));
return $query->row_array();
}
后:
public function get_yachts($slug = FALSE){
if ($slug === FALSE) {
$this->db->join('categories', 'categories.cat_id = yachts.category');
$query = $this->db->get('yachts');
return $query->result_array();
}
$this->db->join('categories', 'categories.cat_id = yachts.category');
$query = $this->db->get_where('yachts', array('slug' => $slug));
return $query->row_array();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.