【发布时间】:2020-05-31 17:20:55
【问题描述】:
我正在使用 CodeIgniter,但我遇到了 join 方法的问题。
我希望通过 service_id 来自db_services 表的服务,该服务也存储在db_orders 中的同一列名称service_id 中,我将service_id 作为db_services 表中的主键。
现在用户通过单击所需服务的复选框在implode() 函数的帮助下添加服务,该函数将数据正确放入数据库db_orders 表中service_id 列下,即1,2,3,5
现在,当我从 db_orders 检索数据时,我从数据库中得到逗号分隔的值,当我在 Order_model -> view_orders() 函数中删除此行 $this->db->join( $this->db->dbprefix('db_services'), $this->db->dbprefix('db_services').'.service_id = '.$this->db->dbprefix('db_orders').'.service_id' ); 时,它工作正常,但当我添加该行仅显示一条记录(第一条记录),例如,如果插入了两 (2) 个 service_id,所以我只得到我猜是在数据库期间插入的第一个数字的那个。
<?php $services = explode(",", $value->service_id);
foreach ( $services as $service ): ?>
<a href="" class="btn btn-success btn-flat btn-xs"><?php echo $service; ?></a>
<?php endforeach; ?>
这是我已经解决的问题,但实际问题是当我使用join table 方法它不起作用让我复制粘贴我的代码,这可以帮助你更好地解决问题我已经提到了每一个小细节,如果您需要更多,我可以进一步详细说明。
Order_model -> view_orders()
<?php
public function view_orders()
{
$this->db->select( '*' );
$this->db->from( $this->db->dbprefix('db_orders') );
$this->db->join( $this->db->dbprefix('db_order_status'), $this->db->dbprefix('db_order_status').'.order_status_id = '.$this->db->dbprefix('db_orders').'.order_status_id' );
$this->db->join( $this->db->dbprefix('db_users'), $this->db->dbprefix('db_users').'.user_id = '.$this->db->dbprefix('db_orders').'.user_id' );
$this->db->join( $this->db->dbprefix('db_services'), $this->db->dbprefix('db_services').'.service_id = '.$this->db->dbprefix('db_orders').'.service_id' );
$query = $this->db->get();
return $query->result();
}
?>
订单控制器 -> index()
public function index()
{
$data['orders'] = $this->order->view_orders();
$data['title'] = "View All Orders";
$this->load->template('orders/view_all_orders', $data);
}
orders/view_all_orders.php
<?php
$services = explode(",", $value->service_id);
foreach ( $services as $service ): ?>
<a href="" class="btn btn-success btn-flat btn-xs"><?php echo $service; ?></a>
<?php endforeach; ?>
【问题讨论】:
-
我需要使用它,因为我有一个单独的表用于服务
db_services,它存储有关服务的所有相关数据,例如price,所以我将services_id存储在db_orders中,这样我就可以获取有关服务的相关数据。 -
不,你没有。在规范化模式中保留服务表根本不是问题,甚至相反。使用链接表对订单和服务之间的关系进行建模。我认为您应该对如何在关系数据库中建模和规范化进行一些研究。
-
我猜关系列工作正常是不是代码有问题,因为当我删除一行
$this->db->join( $this->db->dbprefix('db_services'), $this->db->dbprefix('db_services').'.service_id = '.$this->db->dbprefix('db_orders').'.service_id' );时,我得到了 ID,但问题是我无法获取带有 ID 的服务名称这种情况下,我必须在这种情况下获取服务名称和价格 -
再一次也是最后一次:您以错误的方式使用数据库!你遇到的问题只是其中的表象。原因是模型错误。如前所述修复此问题,然后您可以简单地连接三个表。
标签: php mysql codeigniter