开发者

Quickly finding the last item in a database Cakephp

I just inherited some cakePHP code and I am not very familiar with it (or any other php/serverside language). I need to set the id of the item I am adding to the database to be the value of the last item plus one, originally I did a call like this:

$id = $this->Project->find('count') + 1;

but this seems to add about 8 seconds to my page loading (which seems weird because the database only has about 400 items) but that is anothe开发者_JAVA技巧r problem. For now I need a faster way to find the id of the last item in the database, is there a way using find to quickly retrieve the last item in a given table?


That's a very bad approach on setting the id.

You do know that, for example, MySQL supports auto-increment for INT-fields and therefore will set the id automatically for you?

The suggested functions getLastInsertId and getInsertId will only work after an insert and not always.

I also can't understand that your call adds 8 seconds to your siteload. If I do such a call on my table (which also has around 400 records) the call itself only needs a few milliseconds. There is no delay the user would notice.

I think there might be a problem with your database-setup as this seems very unlikely.

Also please have a look if your database supports auto-increment (I can't imagine that's not possible) as this would be the easiest way of adding your wanted functionality.


I would try

$id = $this->Project->getLastInsertID();
$id++;

The method can be found in cake/libs/model/model.php in line 2768

As well as on this SO page

Cheers!


If you are looking for the cakePHP3 solution to this you simply use last().

ie:

use Cake\ORM\TableRegistry;
....
$myrecordstable=Tableregistry::get('Myrecords');
$myrecords=$myrecordstable->find()->last();
$lastId = $myrecords->id;
....
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜