无法将数据库结果传递给我在Codeigniter中的视图

时间:2016-02-22 04:36:56

标签: php mysql codeigniter datatable

我正在学习Codeigniter,我希望在我的视图中将数据从数据库显示到数据表。

我不知道该怎么做,我试图将数据库中的数据显示在视图中(使用数据表)。

这是我的模特:

function get_all_tagihan(){
        return $this->db->query("
            SELECT * FROM tagihan
            WHERE tagihan.TAGIHAN_ISDELETED=0
            ORDER BY tagihan.TAGIHAN_ID;
        ");
    }

这是我的控制器:

public function gettagihan(){

        $this->load->model('model_tagihan');
        $res=$this->model_tagihan->get_all_tagihan();
        $data_tagihan['tagihan']=$res;
        $this->load->view('monitoring/kosong', $data_tagihan);

    }

在这里我的观点:

<table id="table1" class="table striped hovered cell-hovered border bordered" width="100%">
        <thead>
        <tr valign="middle">
            <td><b>Tarif</b></td>
            <td><b>No. Meter Panel</b></td>
            <td><b>Periode</b></td>
            <td><b>Nama</b></td>
            <td><b>Alamat</b></td>
            <td><b>Unitup</b></td>
            <td><b>Jenis Tarif</b></td>
            <td><b>Daya</b></td>
            <td><b>Nominal PLN</b></td>
            <td><b>Batas Atas</b></td>
            <td><b>Hasil Audit</b></td>
        </tr>
        </thead>



        <?php
        echo"<tbody>";
        if (isset($data_tagihan)){
        foreach ($tagihan as $key) {
            echo"<tr><td>".$key->TARIF_ID."</td>";
            echo"<td>".$key->PANEL_ID."</td>";
            echo"<td>".$key->TAGIHAN_PERIODE."</td>";
            echo"<td>".$key->TAGIHAN_NAMA."</td>";
            echo"<td>".$key->TAGIHAN_ALAMAT."</td>";
            echo"<td>".$key->TAGIHAN_UNITUP."</td>";
            echo"<td>".$key->TAGIHAN_JENISTARIF."</td>";
            echo"<td>".$key->TAGIHAN_DAYA."</td>";
            echo"<td>".$key->TAGIHAN_NOMINALPLN."</td>";
            echo"<td>".$key->TAGIHAN_BATASATAS."</td>";
            echo"<td>".$key->HASILAUDIT_ID."</td></tr>";
        }
        }
        ?>
        </tbody>
    </table>

它显示数据表,没有显示错误,但为什么它一直说“表中没有数据”?我的数据库中已有一些数据。

我不知道。你们对我的想法有什么建议吗?谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

在构建查询后,您忘记使用result()。请记住,这应该在您的模型方法中,因为$q->result()是数据层的一部分:

public function get_all_tagihan(){
    $q = $this->db->query("
                SELECT * FROM tagihan
                WHERE tagihan.TAGIHAN_ISDELETED=0
                ORDER BY tagihan.TAGIHAN_ID;
            ");
    return $q->result();
}

来源:Generating Query Results in Codeigniter 3

<强>更新

你的观点也有问题(正如@blacmoon所提到的):

每次向视图发送数据时,都可以通过控制器分配数组并将其传递给视图来完成。执行此操作时,您将所有数组元素作为变量发送到视图。换句话说, only 数组的元素将转换为视图中的变量,数组的实际名称永远不会传递。例如:

如果您的控制器是这样的:

function test()
{
    $data = array(
        "parent_name" => "John",
        "parent_age" => 52,
        "children" => array(
            array(
                "name" => "Jane",
                "age" => 22,
            )
        )
    );
    $this->load->view('test', $data);
}

您的视图只会收到以下变量:

$parent_name = "John";
$parent_age = 52;
$parent_children = array(
    array(
        "name" => "Jane",
        "age" => 22,
    )
);

正如您所见,变量$data永远不会传递,因此在视图中不存在。

在您的情况下,您以这种方式设置数组$data_tagihan

$res = $this->model_tagihan->get_all_tagihan();
$data_tagihan['tagihan'] = $res;
$this->load->view('monitoring/kosong', $data_tagihan);

然后在你的视图中检查它:

 if (isset($data_tagihan)){

这是错误的,因为$data_tagihan永远不会存在。但是$tagihan确实存在。因此,您的条件应该是这样的:

 //empty() is best used because it checks if its set, and if it has contents
 if (!empty($tagihan)){

希望这有帮助。

答案 1 :(得分:0)

在你的模特中......

function get_all_tagihan()
{
    return $this->db->query("SELECT * FROM tagihan WHERE tagihan.TAGIHAN_ISDELETED = 0 ORDER BY tagihan.TAGIHAN_ID;")->result();
}

最后考虑......

if (count($tagihan) > 0 )
{
    foreach ($tagihan as $key) 
    {
        echo"<tr><td>".$key->TARIF_ID."</td>";
        echo"<td>".$key->PANEL_ID."</td>";
        echo"<td>".$key->TAGIHAN_PERIODE."</td>";
        echo"<td>".$key->TAGIHAN_NAMA."</td>";
        echo"<td>".$key->TAGIHAN_ALAMAT."</td>";
        echo"<td>".$key->TAGIHAN_UNITUP."</td>";
        echo"<td>".$key->TAGIHAN_JENISTARIF."</td>";
        echo"<td>".$key->TAGIHAN_DAYA."</td>";
        echo"<td>".$key->TAGIHAN_NOMINALPLN."</td>";
        echo"<td>".$key->TAGIHAN_BATASATAS."</td>";
        echo"<td>".$key->HASILAUDIT_ID."</td></tr>";
    }
}
else
{
    echo "no data in table";
}