【问题标题】:Error Call to a member function getPccMethod() on null CodeIgniter 4在空 CodeIgniter 4 上调用成员函数 getPccMethod() 时出错
【发布时间】:2020-09-30 18:26:55
【问题描述】:

我想创建 2 个 JOIN 表 mysql 并出现错误。由 Bengkel_model.php 上的函数引起的错误,但我不知道因为我是 CodeIgniter 的新手。

我的控制器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();
    }

}

我尝试在 Controller 上添加构造函数,但仍然出现错误。我是 CodeIgniter 的新手。

我的模型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;
    } 

}

任何人都可以帮助我。我很沮丧。对不起我的英语不好。

【问题讨论】:

  • $this-&gt;Bengkel_model 为空,无论设置失败。
  • 您错过了创建模型对象。和@ViLar一起去

标签: php codeigniter join codeigniter-4


【解决方案1】:

像你的模型的其他调用一样做它

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

或者,如果您想避免在控制器的任何地方创建模型,请将其创建为控制器的属性。

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

如果您采用第二个选项,请不要忘记在您的控制器中使用$this-&gt;model 而不是$model 调用您的模型。

【讨论】:

  • 当我采用第一个选项时,我的模型中出现新错误“调用未定义方法 CodeIgniter\Database\MySQLi\Connection::select()”。
  • 问题已解决。我正在使用查询生成器类并在我的控制器中添加 $data['pcc'] 。你写的第一个选项很有用。非常感谢。
猜你喜欢
  • 2021-01-23
  • 1970-01-01
  • 1970-01-01
  • 2017-06-18
  • 1970-01-01
  • 2022-01-02
  • 2020-09-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多