[英]how to get/retrieve data based on current login user codeigniter but foreign key connected to another foregin key
我仍然对从当前用户登录会话中获取数据感到困惑,因为它为我提供了所有数据,而不仅仅是我当前用户所需的数据。 我想使用表格guru
ID作为当前用户会话,但nilai
表格已经具有来自mapel
和g_mapel
外键,用于教师数据,但具有特定的课程,而g_mapel
具有指向guru
外键,该教师具有教师生物数据的完整数据,我m使用此表作为具有密码和电子邮件的用户登录表。
这是大师的数据库
CREATE TABLE `guru` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`namag` VARCHAR(100) NOT NULL,
`email` VARCHAR(100) NOT NULL,
`pass` VARCHAR(255) NOT NULL,
`nip` VARCHAR(100) NOT NULL,
`id_sekolah` INT(11) NOT NULL,
`id_role` INT(1) NOT NULL,
`photo_gr` VARCHAR(255) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `email_gr` (`email`),
INDEX `FK_guru_sekolah` (`id_sekolah`),
INDEX `FK_guru_role` (`id_role`),
CONSTRAINT `FK_guru_role` FOREIGN KEY (`id_role`) REFERENCES `role` (`id`) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT `FK_guru_sekolah` FOREIGN KEY (`id_sekolah`) REFERENCES `sekolah` (`id`) ON UPDATE CASCADE ON DELETE CASCADE
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=11
;
这是g_mapel的数据库
CREATE TABLE `g_mapel` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`id_guru` INT(11) NOT NULL,
`id_mapel` INT(11) NOT NULL,
`id_kelas` INT(11) NOT NULL,
PRIMARY KEY (`id`),
INDEX `FK_g_mapel_guru` (`id_guru`),
INDEX `FK_g_mapel_mapel` (`id_mapel`),
INDEX `FK_g_mapel_kelas` (`id_kelas`),
CONSTRAINT `FK_g_mapel_guru` FOREIGN KEY (`id_guru`) REFERENCES `guru` (`id`) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT `FK_g_mapel_kelas` FOREIGN KEY (`id_kelas`) REFERENCES `kelas` (`id`) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT `FK_g_mapel_mapel` FOREIGN KEY (`id_mapel`) REFERENCES `mapel` (`id`) ON UPDATE CASCADE ON DELETE CASCADE
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=10
;
这是枫木表
CREATE TABLE `mapel` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`nama_pel` VARCHAR(100) NOT NULL,
`id_kelas` INT(3) NOT NULL,
PRIMARY KEY (`id`),
INDEX `FK_mapel_kelas` (`id_kelas`),
CONSTRAINT `FK_mapel_kelas` FOREIGN KEY (`id_kelas`) REFERENCES `kelas` (`id`) ON UPDATE CASCADE ON DELETE CASCADE
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=8
;
这是汝来的桌子
CREATE TABLE `nilai` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`id_mapel` INT(11) NOT NULL,
`angka` VARCHAR(5) NOT NULL,
`id_siswa` INT(11) NOT NULL,
PRIMARY KEY (`id`),
INDEX `FK_nilai_mapel` (`id_mapel`),
INDEX `FK_nilai_siswa` (`id_siswa`),
CONSTRAINT `FK_nilai_mapel` FOREIGN KEY (`id_mapel`) REFERENCES `mapel` (`id`) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT `FK_nilai_siswa` FOREIGN KEY (`id_siswa`) REFERENCES `siswa` (`id`) ON UPDATE CASCADE ON DELETE CASCADE
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=19
;
这是模型nilai_model.php
function get_nilai_siswa()
{
$this->db->select('nl.id, sw.namas, mp.nama_pel, nl.angka, gr.namag, gr.id');
$this->db->from('nilai nl');
$this->db->join('siswa sw', 'sw.id=nl.id_siswa');
$this->db->join('mapel mp', 'mp.id=nl.id_mapel');
$this->db->join('g_mapel gm', 'mp.id=gm.id_mapel');
$this->db->join('guru gr', 'gr.id=gm.id_guru');
$this->db->where("gr.id", $this->session->userdata('guru_ses'));
$this->db->distinct('nilai');
return $this->db->get('nilai')->result_array();
}
}
这是控制器nilai.php
function index($id)
{
$data['nilai'] = $this->Nilai_model->get_nilai_siswa($id);
$data['_view'] = 'nilai/index';
$this->load->view('layouts/main', $data);
}
这是视图index.php
<tr>
<th>No</th>
<th>Nama</th>
<th>Nilai</th>
<th>Nama Pelajaran</th>
<th>Nama Guru</th>
<?php if ($this->session->userdata('id_role') === '1') : ?>
<th>Pilihan</th>
<?php elseif ($this->session->userdata('id_role') === '2') : ?>
<th>Pilihan</th>
<?php else : ?>
<?php endif; ?>
</tr>
</thead>
<tbody>
<?php
$no = 1;
foreach ($nilai as $n) { ?>
<tr>
<td><?php echo $no++; ?></td>
<td><?php echo $n['namas']; ?></td>
<td><?php echo $n['angka']; ?></td>
<td><?php echo $n['nama_pel']; ?></td>
<td><?php echo $n['namag']; ?></td>
<td>
我希望有人可以为此提供帮助,因为即使从codeigniter本身阅读手册,我也真的不了解它。
您在nilai_model.php
的函数必须具有$id
的参数,这就是为什么您收到Message: Too few arguments to function Nilai::
错误的原因Message: Too few arguments to function Nilai::
,而且$this->session->userdata('guru_ses')
也会导致错误如果它不返回一个id并且必须更改为$id
function get_nilai_siswa($id = null)
{
$this->db->select('nl.id, sw.namas, mp.nama_pel, nl.angka, gr.namag, gr.id');
$this->db->from('nilai nl');
$this->db->join('siswa sw', 'sw.id=nl.id_siswa');
$this->db->join('mapel mp', 'mp.id=nl.id_mapel');
$this->db->join('g_mapel gm', 'mp.id=gm.id_mapel');
$this->db->join('guru gr', 'gr.id=gm.id_guru');
$this->db->where("gr.id", $id);
$this->db->distinct('nilai');
return $this->db->get('nilai')->result_array();
}
}
并在nilai.php
如果没有数据,则尝试使用$this->db->last_query()
function index($id)
{
$data['nilai'] = $this->Nilai_model->get_nilai_siswa($id);
var_dump($this->db->last_query()); //this one..
$data['_view'] = 'nilai/index';
$this->load->view('layouts/main', $data);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.