我正在学习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>
它显示数据表,没有显示错误,但为什么它一直说“表中没有数据”?我的数据库中已有一些数据。
我不知道。你们对我的想法有什么建议吗?谢谢你的帮助!
答案 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";
}