Search code examples
phpcodeigniterjoincodeigniter-4

Error Call to a member function getPccMethod() on null CodeIgniter 4


I want to create 2 JOIN tables mysql and getting error. The error caused by function on Bengkel_model.php but i don't know coz i'm new in CodeIgniter.

My Controller Bengkel.php

<?php namespace App\Controllers;

use CodeIgniter\Controller;
use App\Models\Bengkel_model;

class Bengkel extends Controller
{  

    public function index()
    {
        $model = new Bengkel_model();
        $data['bengkel'] = $model->getBengkel();
        echo view('bengkel_view',$data);
    }

    public function add_new()
    {
        echo view('add_bengkel_view');
    }

    public function save()
    {
        $model = new Bengkel_model();
        $data = array(
            'nmBengkel' => $this->request->getPost('nmBengkel'),
            'rtBengkel' => $this->request->getPost('rtBengkel')
        );
        $model->saveBengkel($data);
        return redirect()->to('/bengkel');
    }

    function edit($id)
    {
        $model = new Bengkel_model();
        $data['bengkel'] = $model->getBengkel($id)->getRow();
        echo view('edit_bengkel_view', $data);
    }

    public function update()
    {
        $model = new Bengkel_model();
        $id = $this->request->getPost('idBengkel');
        $data = array(
            'nmBengkel' => $this->request->getPost('nmBengkel'),
            'rtBengkel' => $this->request->getPost('rtBengkel'),
        );
        $model->updateBengkel($data, $id);
        return redirect()->to('/bengkel');
    }

    public function delete($id)
    {
        $model = new Bengkel_model();
        $model->deleteBengkel($id);
        return redirect()->to('/bengkel');
    }

    public function pcc_method()
    { 
        $data = $this->Bengkel_model->getPccMethod();
    }

}

I've try to add Constructor on Controller but it still getting error. I'm new in CodeIgniter.

My Model Bengkel_model.php

<?php namespace App\Models;
use CodeIgniter\Model;

class Bengkel_model extends Model
{
    protected $table = 'bengkel';

    public function getBengkel($id = false)
    {
        if($id === false){
            return $this->findAll();
        }
        else{
            return $this->getWhere(['idBengkel' => $id]);
        }   
    }

    public function getPccMethod()
    {
        $response = array();

        $this->db->select('*');
        $this->db->from('rating');
        $this->db->join('user','user.idUser = rating.idUser');
        $query = $this->db->get(); 
        $response = $query->result_array();
        if($query->num_rows() != 0)
        {
            return $response;
        }
        else
        {
            return false;
        }                   
    }

    public function saveBengkel($data)
    {
        $query = $this->db->table($this->table)->insert($data);
        return $query;
    }

    public function updateBengkel($data, $id)
    {
        $query = $this->db->table($this->table)->update($data, array('idBengkel' => $id));
        return $query;
    }

    public function deleteBengkel($id)
    {
        $query = $this->db->table($this->table)->delete(array('idBengkel' => $id));
        return $query;
    } 

}

Anyone can help me please. Im so frustrated. Sorry for my bad english.


Solution

  • Do it like the other calls of your model

    public function pcc_method() 
        {
            $model = new Bengkel_model();
            $data = $model->getPccMethod();
        }
    

    Or if you'd like to avoid creating a model everywhere in your controller, create it as an attirbute of your controller.

    class Bengkel extends Controller
    {  
        protected $model = new Bengkel_model();
        // ...
        public function pcc_method()
        { 
            $data = $this->model->getPccMethod();
        }
    }
    

    If you adopt the second option, don't forget to call your model with $this->model instead of $model in your controller.