繁体   English   中英

如何基于当前的登录用户代码点火器获取/检索数据,但外键已连接到另一个前键

[英]how to get/retrieve data based on current login user codeigniter but foreign key connected to another foregin key

我仍然对从当前用户登录会话中获取数据感到困惑,因为它为我提供了所有数据,而不仅仅是我当前用户所需的数据。 我想使用表格guru ID作为当前用户会话,但nilai表格已经具有来自mapelg_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM