【问题标题】:CodeIgniter join() does not show comma separated valuesCodeIgniter join() 不显示逗号分隔值
【发布时间】: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-&gt;db-&gt;join( $this-&gt;db-&gt;dbprefix('db_services'), $this-&gt;db-&gt;dbprefix('db_services').'.service_id = '.$this-&gt;db-&gt;dbprefix('db_orders').'.service_id' ); 时,我得到了 ID,但问题是我无法获取带有 ID 的服务名称这种情况下,我必须在这种情况下获取服务名称和价格
  • 再一次也是最后一次:您以错误的方式使用数据库!你遇到的问题只是其中的表象。原因是模型错误。如前所述修复此问题,然后您可以简单地连接三个表。

标签: php mysql codeigniter


【解决方案1】:

好吧,这就是我提供的解决方案。

通过删除这一行来调整我的功能 -> //$this-&gt;db-&gt;join( $this-&gt;db-&gt;dbprefix('db_services'), $this-&gt;db-&gt;dbprefix('db_services').'.service_id = '.$this-&gt;db-&gt;dbprefix('db_orders').'.service_id' );

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();
}

我在 Order_model 下创建了另一个函数 -> get_services() 如下。

public function get_services()
{
    $query = $this->db->get( $this->db->dbprefix('db_services') );
    return $query->result();
}

现在我的控制器看起来像这样

public function index()
{
  $data['get_services'] = $this->order->get_services(); // added this line to get all services and show it view by respective id
  $data['orders'] = $this->order->view_orders();
  $data['title'] = "View All Orders";
  $this->load->template('orders/view_all_orders', $data);
}

我现在的视图是这样的。

<?php foreach( $orders as $order ): ?>
  <tr>
    <td><a href="/orders/view/<?php echo $order->order_id; ?>"><?php echo $order->order_id; ?></a></td>
    <td><?php echo $order->status; ?></td>
    <td>
      <a href="/user/view/<?php echo $order->user_id; ?>"><?php echo $order->name;?></a>
    </td>
    <td>
      <?php
        $service_ids = explode(',', $order->service_id);
        foreach ($service_ids as $service_id) {
          foreach ($get_services as $row) {
            if ($service_id == $row->service_id) {
              echo $row->service_name;
            }
          }
        }
      ?>
    </td>
    <td><?php echo gmdate('l jS F, Y',$order->created); ?></td>
    <td>
      <a class="btn btn-xs btn-flat btn-info" href="/orders/view/<?php echo $order->order_id; ?>"><i class="fas fa-eye"></i></a>
      <a class="btn btn-xs btn-flat btn-success" href="/orders/edit/<?php echo $order->order_id; ?>"><i class="fas fa-edit"></i></a>
      <a class="btn btn-xs btn-flat btn-danger" href="/orders/delete/<?php echo $order->order_id; ?>"><i class="fas fa-trash"></i></a>
    </td>
  </tr>
<?php endforeach; ?>

就这帮助我解决了我的问题,但我仍然很困惑我是否遵循正确的方向

【讨论】:

    猜你喜欢
    • 2020-05-21
    • 2016-07-12
    • 2014-04-17
    • 1970-01-01
    • 2011-01-26
    • 2013-05-31
    • 1970-01-01
    • 2018-08-22
    • 2019-05-14
    相关资源
    最近更新 更多