Использование номера телефона в качестве первичного ключа не очень хорошая идея. Если вы хотите убедиться, что у вас нет нескольких пользователей с одним телефоном, просто добавьте к нему ограничение unique
.
Кстати, почему вы вставляете И обновляете строку одновременно? Или, почему вы всегда вставляете строку, если, возможно, это будет просто обновление?
Я предлагаю: не используйте телефон в качестве первичного ключа. Добавьте значение идентификатора вашей модели.
Модель
namespace Registration\Model;
class Registration
{
public $registrationId;
// ... And all other fields
public function exchangeArray(array $data)
{
$this->registrationId = ($data['registrationId']) ? $data['registrationId'] : null;
// And all other fields
}
Таблица моделей
<?php
namespace Registration\Model;
class RegistrationTable
{
public function saveRegistration(Registration $register)
{
$data = [
'registrationId' => $register->registrationId,
// ... And all other fields
];
if(!$register->registrationId)
{
// No registration id, it is an insert
$this->tableGateway->insert($data);
// If you want to have its id:
return $this->tableGateway->lastInsertValue;
}
else
{
// Ideally, here you'd also check if the row actually exists
//
// if(!$this->tableGateway->select(['registrationId' => $register->registrationId]))
// {
// throw new \Exception('Element not found');
// }
$this->tableGateway->update($data, ['registrationId' => $register->registrationId]);
// Return id to keep consistency (always return an int)
return $register->registrationId;
}
}
}
Не забудьте добавить его в форму! В противном случае, вы никогда не закончите обновление (registrationId
будет потеряно в процессе ..).