Как соединить работу двух методов? Есть класс 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, внутри класса

21 Авг 2019 в 06:58
150 +1
0
Ответы
1

Ваш подход к соединению работы двух методов в контроллере выглядит вполне разумно. Если метод 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() в зависимости от результата выполнения операций.

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 706 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир