Retrieving inserted IDs from saveAll() in CakePHP
Asked Answered
D

1

8

Using saveAll() to save multiple records in CakePHP, I am able to save them successfully in a table. But the problem arises while retrieving the IDs of those saved rows. LastInsertID() returns only a single last ID here. How can I get all the last inserted IDs which I have inserted using saveAll()?

Dorita answered 19/3, 2012 at 11:44 Comment(0)
R
27

afterSave function is called after each individual save in a saveAll execution, so you could do: In your AppModel


class AppModel extends Model {
    var $inserted_ids = array();

    function afterSave($created) {
        if($created) {
            $this->inserted_ids[] = $this->getInsertID();
        }
        return true;
    }
}

You can place this code into any model and it should work fine. Then to return the IDs after the saveAll in your controller, you would do so like this:


if($this->Post->saveAll($posts)) {
    $post_ids=$this->Post->inserted_ids; //contains insert_ids
}

Hope it helps

Retrieval answered 19/3, 2012 at 11:57 Comment(5)
Thanx Sudhir,i tried this but its throwing an error Undefined property: AppModel:inserted_ids in my controller, what can be the reason..??Dorita
@vin.it remove var before $inseted_idsOutsoar
@ehtesham: thanx ehtesham.i tried it but its still throwing the same error. any other possibilities..?Dorita
It's cool seeing code copied and pasted from one's own blog in a Stack Overflow answer :DJunna
yes, it should work fine with atomic option set to true.Retrieval

© 2022 - 2024 — McMap. All rights reserved.