codeigniter v4 num_rows()调用undefined方法

mw3dktmi  于 2023-05-04  发布在  其他
关注(0)|答案(5)|浏览(156)

在文档Codeigniter 4中找不到行数。
我的模型中的方法:

public function getListCat()
{
    $listCat = $this->asArray()->where(['id_user' => $session->id])->get();
    return $listCat->num_rows();

我检查“调用未定义的方法CodeIgniter\Database\MySQLi\Result::num_rows()”
如何在Codeigniter 4中获取“num_rows()”数据?

00jrzges

00jrzges1#

孩子,我也花了一些时间研究,但现在,我得出了以下结论:
根据框架文档,它使用两种方法来帮助您计算结果:

$builder->countAllResults();
$builder->countAll();

https://codeigniter4.github.io/userguide/database/query_builder.html#limiting-or-counting-results
然而,在codeigniter论坛上有一些关于最佳方法的讨论,因为理论上,$builder->countAllResults()CountAll()将对数据库执行另一个查询。
在CI 4工作了一段时间后,我注意到了一个奇怪的现象:如果您在模型上调用get(),在控制器上调用$queryVarHoldingModelMethodCall->resultID->num_rows-它将以相同的方式显示行数!我相信,通过这种方式,只在数据库中执行一个查询,因为您可以使用$queryVarHoldingModelMethodCall->getRow()$queryVarHoldingModelMethodCall->getResult()在控制器中调用查询对象
在你的例子中我称之为

public function getListCat()
{
    return $this->asArray()->where(['id_user' => $session->id])->get();
}

在您的控制器中,您可以:

$listCatModel     = new \App\Models\ListCatModel(); // call your Model
$listCat          = $listCatModel->getListCat(); // execute method
$listCat_num_rows = $listCat->resultID->num_rows; // num_rows object
$listCatResults   = $listCat->getResult(); // or ->getRow()

你可以检查你传递的是什么值:

var_dump($listCat);
var_dump($listCat->resultID->num_rows);
var_dump($listCat->getRow());
// exit();
// and maybe an exit(); to stop code execution on your vars values and print them for testing

//让我知道你是怎么做的,如果它工作,因为我们没有足够的文档到目前为止。我正在重写我的第一个应用程序从CI 3到CI 4,一般来说,它减少了原始代码的1/3。努力工作,期待看到最终的结果。祝你好运!最好的问候

lkaoscv7

lkaoscv72#

Codeigniter 4没有num_row()函数,就像我回答这个问题时的Codeigniter 3一样。这是我检查是否存在任何数据的方式。我正在尝试重新修改您的代码如下

public function getListCat()
{
    $listCat = $this->asArray()->where('id_user', $session->id)->countResultAll();
    return $listCat;
}

我希望这将为你工作,否则请引起我的注意。

1dkrff03

1dkrff033#

您可以在CI4中将num_rows()更改为getNumRows。它的工作原理相同。除此之外,您必须更改getwhere的位置

public function getListCat(){
       $listCat = $this->table(your_table)->asArray()->getWhere(['id_user' => $session->id]);
       return $listCat->getNumRows();
 }
czq61nw1

czq61nw14#

由于countAllResults也会重置传递给select()的任何字段值,因此只需将false作为第一个参数即可。return(false);
参考-https://codeigniter.com/user_guide/database/query_builder.html#limiting-or-counting-results

6rqinv9w

6rqinv9w5#

$query = $this->where('id_user', $session->id)->get();
//print_r($query);
//die;
return $query->getNumRows();
exit;

//num_rows() is depreciated in CI4. Its been changed to getNumRows() and many other query builder classes

参考:https://codeigniter.com/user_guide/database/results.html?highlight=getnumrows#getNumRows

相关问题