如何在 restful api codeigniter 4 中使用 where?

how to use where like in restful api codeigniter 4?

我正在制作一个使用 codeigniter 4 连接到 restful api 服务器的 reactjs。我只想显示字段 username 和 [=14] 的数据=] 包含查询字符串 q

我的代码大致是这样的:

<?php
namespace App\Controllers;

use CodeIgniter\RESTful\ResourceController;
use CodeIgniter\API\ResponseTrait;
use App\Models\UserModel;

class Users extends ResourceController
{
    use ResponseTrait;

    public function index()
    {
        $model = new UserModel();

        $data = [];

        // example uri: http://localhost:8080/users?q=asd
        $qs = $_SERVER['QUERY_STRING'];
        parse_str($_SERVER['QUERY_STRING'], $_GET);
        $searchStr = empty($_GET['q']) ? '' : $_GET['q'];
        if ($searchStr)
        {
            $data = $model->group_start()
                            ->like('username', $searchStr)
                            ->or_like('nama', $searchStr)
                        ->group_end()
                        ->findAll();
        }
        else
        {
            $data = $model->findAll();
        }

        return $this->respond($data);
    }
}

当 React js 应用程序中的搜索框为空时,所有数据都会正确显示。但是当搜索框不为空时,$data returns 为空数组。 . 是 group_start() 部分的问题吗?我该如何解决?

提前致谢

问题 是,您没有在 SQL 查询中使用任何通配符 这是一个link到SQL喜欢的操作

另外,我认为您不需要从 URL 解析 query string,只需键入 $_GET['q']

在这一行中你有一个错误:

$searchStr = empty($_GET['q']) ? '' : $_GET['q']);

当您的查询中有 q 时,空条件为真。 就这样吹吧:

$searchStr = $_GET['q'] ? $_GET['q'] : '' ;

样本:$myString = condition ? true : false ;

我是这样穿的: 注意图案线

public function index()
    {
        $model = new UserModel();
        $data = [];
        $searchStr = $_GET['q'] ? $_GET['q'] : '' ;
        if ($searchStr)
        {
            $patern = '%'.$searchStr.'%'; // % char represent any char in before and after

            $data = $model->group_start()
                            ->like('username', $patern )
                            ->or_like('nama', $patern )
                        ->group_end()
                        ->findAll();
        }
        else
        {
            $data = $model->findAll();
        }