• 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Is there no longer a need for num_rows()?

#1
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;

Reply

#2
I think you're looking for $builder->countAllResults()
Reply

#3
(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.
Reply

#4
(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.
Reply

#5
The countAll method returns

PHP Code:
return (int) $query->numRows
What did you Try? What did you Get? What did you Expect?

Joined CodeIgniter Community 2009.  ( Skype: insitfx )
Reply

#6
(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.
Reply


Digg   Delicious   Reddit   Facebook   Twitter   StumbleUpon  


Users browsing this thread:
1 Guest(s)


  Theme © 2014 iAndrew  
Powered By MyBB, © 2002-2019 MyBB Group.