调用未定义的方法 CodeIgniter\Database\MySQLi\Connection::like()

Call to undefined method CodeIgniter\Database\MySQLi\Connection::like()

我喜欢在我的模型中查询,但它不起作用 型号:

<?php namespace App\Models;

use CodeIgniter\Model;

class SearchModel extends Model
{
    protected $table      = 'sport_tbl';
    protected $primaryKey = 'id';
    protected $returnType     = 'array';
  
    public function search($word)
    {   
        $this->db->like('title', $word);
        $res = $this->db->get('sport_tbl')->result_array();
        return $res;
    }
}

控制器:

<?php namespace App\Controllers\api;
use App\Controllers\BaseController;
use App\Models\SearchModel;

class Search extends BaseController
{
    public function index()
    {
        $searchModel = new SearchModel(); 
     
        $data['allnews'] = $searchModel->search('test');

        return view('welcome_message', $data);
    }
}

这是错误: 调用未定义的方法 CodeIgniter\Database\MySQLi\Connection::like()

您基本上使用的是 Codeigniter 3 中的旧查询构建器样式,而不是 Codeigniter 4。

在 Codeigniter 4 中,您的代码应如下所示。

<?php namespace App\Models;

use CodeIgniter\Model;

class SearchModel extends Model
{
    protected $table      = 'sport_tbl';
    protected $primaryKey = 'id';
    protected $returnType = 'array';
  
    public function search($word)
    {   
        $db = \Config\Database::connect();
        $builder = $db->table('sport_tbl');
        $builder->like('title', $word);
        return $builder->get()->getResultArray();
    }
}

在这种情况下,您的控制器应该是一样的。

然而,还有另一种方法可以完成相同的操作,而无需创建新的数据库对象并使用自动为您创建的同一个数据库对象。

<?php namespace App\Models;

use CodeIgniter\Model;

class SearchModel extends Model
{
    protected $table      = 'sport_tbl';
    protected $primaryKey = 'id';
    protected $returnType = 'array';
  
    public function search($word)
    {   
        $this->like('title', $word);
        return $builder->get()->getResultArray();
    }
}

在这种情况下,您的控制器应该有点不同:

<?php namespace App\Controllers\api;
use App\Controllers\BaseController;
use App\Models\SearchModel;

class Search extends BaseController
{
    public function index()
    {
        $searchModel = new SearchModel(); 
     
        $data['allnews'] = $searchModel->search('test')->getAll();

        return view('welcome_message', $data);
    }
}

代码的第二个版本实际上更好,因为这样您可以在模型中拥有任意数量的函数,然后只需在链式语句中调用它们并始终返回 $this。