Как соединить работу двух методов? Есть класс Customer Метод create() создает запись о клиенте Метод createContact() создает запись в таблице контактов. Контактов может быть несколько у одного клиента. Тк запись добавляется из сразу и для первой и для второй таблицы (один контакт точно нужно сохранить, причем одним действием), то непонятно, как это реализовать в контроллере. Единственное что пришло в голову, сделать так:if(isset($_POST['create'])){ try{ $last_id = $customer->create($_POST); //метод возвращает новый номер записи if(!empty($last_id)){ $customer->createContact($last_id, $_POST); //передаем его в метод добавления контакта } }catch(AppException $e){
} } Может быть есть иные способы? PS. пробовал также добавлять createContact внутрь create, внутри класса
Ваш подход к соединению работы двух методов в контроллере выглядит вполне разумно. Если метод create() возвращает ID новой записи о клиенте, и этот ID нужен для создания записи в таблице контактов, то передача этого ID из метода create() в метод createContact() является правильным решением.
Если вы хотите улучшить структуру вашего кода, можете рассмотреть возможность использования транзакций для обеспечения атомарности операций добавления клиента и контакта. Таким образом, вы сможете гарантировать целостность данных в случае возникновения ошибки при выполнении любого из запросов.
Пример использования транзакции для вашей задачи:
if(isset($_POST['create'])){ try{ $db->beginTransaction(); $last_id = $customer->create($_POST); //метод возвращает новый номер записи if(!empty($last_id)){ $customer->createContact($last_id, $_POST); //передаем его в метод добавления контакта } $db->commit(); }catch(AppException $e){ $db->rollBack(); // обработка ошибки } }
Здесь $db представляет объект для работы с базой данных, который поддерживает транзакции. Вы начинаете транзакцию методом beginTransaction(), а затем либо коммитите изменения методом commit(), либо откатываете их методом rollBack() в зависимости от результата выполнения операций.
Ваш подход к соединению работы двух методов в контроллере выглядит вполне разумно. Если метод create() возвращает ID новой записи о клиенте, и этот ID нужен для создания записи в таблице контактов, то передача этого ID из метода create() в метод createContact() является правильным решением.
Если вы хотите улучшить структуру вашего кода, можете рассмотреть возможность использования транзакций для обеспечения атомарности операций добавления клиента и контакта. Таким образом, вы сможете гарантировать целостность данных в случае возникновения ошибки при выполнении любого из запросов.
Пример использования транзакции для вашей задачи:
if(isset($_POST['create'])){try{
$db->beginTransaction();
$last_id = $customer->create($_POST); //метод возвращает новый номер записи
if(!empty($last_id)){
$customer->createContact($last_id, $_POST); //передаем его в метод добавления контакта
}
$db->commit();
}catch(AppException $e){
$db->rollBack();
// обработка ошибки
}
}
Здесь $db представляет объект для работы с базой данных, который поддерживает транзакции. Вы начинаете транзакцию методом beginTransaction(), а затем либо коммитите изменения методом commit(), либо откатываете их методом rollBack() в зависимости от результата выполнения операций.