# Cakephp import users failed due to unique rule for email addresses

**URL:** <https://discourse.cakephp.org/t/cakephp-import-users-failed-due-to-unique-rule-for-email-addresses/6580>\
**Category:** Need Help\
**Created:** [September 5, 2019, 2:07pm UTC](https://discourse.cakephp.org/t/cakephp-import-users-failed-due-to-unique-rule-for-email-addresses/6580 "2019-09-05T14:07:46Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![udarts](https://avatars.discourse-cdn.com/v4/letter/u/d9b06d/32.png) [@udarts](https://discourse.cakephp.org/u/udarts)\
**Post date:** [September 5, 2019, 2:07pm UTC](https://discourse.cakephp.org/t/cakephp-import-users-failed-due-to-unique-rule-for-email-addresses/6580/1 "2019-09-05T14:07:46Z")

</div>

I am trying to import users into the db using cakephp 3. It is working, but due to a rule I added, when an email address is being imported that already exists, it fails (rollback kicks in). This is the code for the rule:

```
public function buildRules(RulesChecker $rules)
{
    $rules->add($rules->isUnique(['email'], 'Email ID Already Exists'));
    return $rules;
}

```

Now what I want to know is, how can I skip a record that does already exists and continue to the next one.

Here is part of the code I use to save the array of users:

```
$usersTable = TableRegistry::getTableLocator()->get('users');

$useritems = $usersTable->newEntities($new_array, [
    'validate' => 'get_users_from_google'
]);

if ($usersTable->saveMany($useritems)) {
    echo json_encode('success', 1);
}else{
    echo json_encode('failed', 1);
}

```

This code is part of a function which is called via ajax.

---

<div class="post-metadata">

**Author:** ![ryanolton](https://yyz1.discourse-cdn.com/flex029/user_avatar/discourse.cakephp.org/ryanolton/32/1465_2.png) [@ryanolton](https://discourse.cakephp.org/u/ryanolton)\
**Post date:** [September 6, 2019, 2:45pm UTC](https://discourse.cakephp.org/t/cakephp-import-users-failed-due-to-unique-rule-for-email-addresses/6580/2 "2019-09-06T14:45:46Z")

</div>

Instead of trying to save everything using `saveMany`, loop through each User you want to save:

```
// keep track of whether there were any errors
$complete_success = true;

foreach ( $new_array as $user_data ) {
	$user = $usersTable->newEntity( $user_data, ['validate' => 'get_users_from_google'] );

	// check to see if the User was saved successfully; in this case NOT saved successfully
    if ( !$usersTable->save( $user ) ) {
		$complete_success = false;
	}
}

if ( $complete_success ) {
	echo json_encode( 'success', 1 );
} else {
	echo json_encode( 'failed', 1 );
}
```
