CodeIgniter Forums

Full Version: Is there no longer a need for num_rows()?
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Looking at CI4 and working with databases I can't find a way to get the number of rows returned from a query. 
In CI3 I often did:
PHP Code:
/** @var CI_DB_result $query */
$query $this->db->get(TBL_INVITES);

if (
$query->num_rows() !== 1)
{
    return 
FALSE;
}

/** Continue processing **/ 

Should I do like this in CI4 or is there a better way?
PHP Code:
if (count($query->getResultArray()) !== 1)
{
    return 
false;

I think you're looking for $builder->countAllResults()
(08-12-2019, 03:17 AM)dave friend Wrote: [ -> ]I think you're looking for $builder->countAllResults()

Yeah, but that queries the database again, which num_rows() in CI3 doesn't do. I guess I'll do the count() once and then keep the result as a variable.
(08-12-2019, 03:54 AM)tgix Wrote: [ -> ]
(08-12-2019, 03:17 AM)dave friend Wrote: [ -> ]I think you're looking for $builder->countAllResults()

Yeah, but that queries the database again, which num_rows() in CI3 doesn't do. I guess I'll do the count() once and then keep the result as a variable.

Digging deeper I see that BaseResult has a public property - $numRows. It appears that by using any db operation that returns a Result you should be able to do something like this.

PHP Code:
$res $db->query("YOUR QUERY")->getResult();
$count $res->numRows

I haven't confirmed my premise, only explored the source code. However, after exploring the source more deeply I'm skeptical about my correctness. I cannot find any place where $numRows is assigned a value. (I"m looking at the current state of the develop branch - last commit on Aug 11, 2019)

Even if I'm wrong that property might be a useful place to store the result of your count() call.
The countAll method returns

PHP Code:
return (int) $query->numRows
(08-13-2019, 05:20 AM)InsiteFX Wrote: [ -> ]The countAll method returns

PHP Code:
return (int) $query->numRows

But countAll performs another query on the DB which the OP wants to avoid. That, and countAll() returns the count for the entire table without considering any "where" or "like" clauses.